Managed to get this fixed by ensuring the transforms in the y direction accounted for the centre grey circle's offset in the y direction like so:
g.TranslateTransform(CentreScene.X, CentreScene.Y + RodLength + CompressionHight);
g.RotateTransform(315); // Use first piston tilt angle
g.TranslateTransform(-CentreScene.X, -CentreScene.Y - RodLength - CompressionHight);