The function Box.GetCentre(out Vector3 centre) in the Box.cs file is doing "extra" math calcs. It performs a full matrix transform and applies the translation component. So if the orientation matrix contains a translation component you will get different results if you had called Box.GetCentre();

To make the math equal between the two functions (and further optimize GetCentre(out Vector3) ) remove the additions for transform.Orientation.M41, M42, and M43.

```
public void GetCentre(out Vector3 centre)
{
//NB. the Orientation matrix is supposed to be a raw rotation matrix (no translation)
// comparing this function against the one above (notice how it does a transform normal)
// BEN-OPTIMISATION: Inlined transforms, multiplication and addition.
centre = new Vector3();
centre.X = (sideLengths.X * 0.5f * transform.Orientation.M11) + (sideLengths.Y * 0.5f * transform.Orientation.M21) + (sideLengths.Z * 0.5f * transform.Orientation.M31) /*+ transform.Orientation.M41*/ + transform.Position.X;
centre.Y = (sideLengths.X * 0.5f * transform.Orientation.M12) + (sideLengths.Y * 0.5f * transform.Orientation.M22) + (sideLengths.Z * 0.5f * transform.Orientation.M32) /*+ transform.Orientation.M42*/ + transform.Position.Y;
centre.Z = (sideLengths.X * 0.5f * transform.Orientation.M13) + (sideLengths.Y * 0.5f * transform.Orientation.M23) + (sideLengths.Z * 0.5f * transform.Orientation.M33) /*+ transform.Orientation.M43*/ + transform.Position.Z;
}
```