I’m working in RhinoCommon btw, should have mentioned that previously.
I’ve found a fix for the behaviour I was seeing, I was using a Vector3d property rather than a field and that seems to prevent the Vector3d being transformed by the rotate method.
private Vector3d MyAxis{ get; set; }
private Vector3d _myAxis;
...
var axisOfRotation = new Vector3d(1, 0, 0);
var r = (Math.PI / 180) * 45;
MyAxis = new Vector3d(0, 0, 1);
MyAxis.Rotate(r, axisOfRotation); // MyAxis isn't changed
_myAxis = new Vector3d(0, 0, 1);
_myAxis.Rotate(r, axisOfRotation); // _myAxis is rotated to a new position