I rotate around the Actor Vectors, which works perfectly for me.The only difference is that my implementation actually sets the angular velocity of an object through the physics engine, but the basic premise should be the same. What you’ll find with you’re current implementation is that the ‘small’ amount of roll turns into even more depending on what angle you’re rotating from.
For Roll for example, get the actors Forward Vector and multiply it by whatever rotation value you require. That’s you’re new local-space rotation vector. Convert that to a rotator via ‘Rotate Vector’ and you should be okay. You should also be able to use ‘Add Actor Local Rotation’ or whatever it’s called, since that deals with Quats at a lower-level in the code I believe.
Quaternion rotation should work just fine for you also, but doing rotation via Quat’s is pretty complex. I avoided it in my implementation since mine is all based on angular velocity anyway, and is basically a 6-DOF pawn on top of a spring, which also modifies the angular velocity to make it conform to the surface normal below it.