The function I mentioned returns bounds -- both min and max. Calculate the difference between the min and your transform's position, and include that difference in your offset.

Consider this diagram:

[_a__b__c_]

The first element is "a", so it will be positioned at grid's XYZ, exactly. But the width of the grid, indicated by the square brackets, is wider than that. You can either use Calculate and take the offset between the left side and the 'a' into consideration, or, even easier -- just calculate the difference between the first and the last elements.

You could even write your own logic to create a new set of Bounds() by iterating through each of the children and adding their position to the bounds. This way there will be no need to take the 'min' into consideration.