That’s because rotate uses its local coordinate system to rotate around. You want to rotate around the global axis which would be I think
[Java]
Quaternion q = new Quaternion ().fromAngles(angle, vector); // or however you have the quaternion you want to rotate your model around.
q.multLocal (spatial.getLocalRotation ()); // multiplying this way uses the parent’s coordinate system
spatial.setLocalRotation (q);[/java]
Edit: Realized all the grammatical errors after typing this on the phone, so correcting them.