I'm not 100% about this but from some work I did in VB5 a couple of years ago this is how I understand things to work.

If you rotate about the world axies you just apply the rotations x,y then z (or z, y then x) to the base model one ather the other and create a new (rotated) model to render. This is done every time you render.

Free flight works a little differently. You start bye creating an orientation matrix (3x3 or 4x4 if you include scale)

100

010

001

All your rotations are carried out on this but to make things a little more complicated you x,y and z rotations are based on the the orientation matrix so rotate alond the z axis by 180 degrees and the matrix changes to.

-1 0 0

0 -1 0

0 0 1

Now the x vector is pointing in the opposite

After all your rotations you then multiply each vertex and normal in the original model by the new orientation matrix to create a new one for rendering.

All further ratations are done to the new orientation matrix.

As you can see each method works by applying a rotation to the base model so mixing them does not work.

If you want to set the rotation back to 0,0,0 either delete and reload the object or at the start use set object to object orientation on a hidden object then set your objects orientation back to that of the hidden object whenever required.

If this doesn't make sense, sorry but it makes my head hurt trying to explain it