Is the limb "linked" to anything else ?
I seem to remember that linked limbs got their "actual" position/rotation from whatever they were linked to, is that right ?
If the above is true, the reason that the values change, is probably because the limb is actually recieving the commands and storing where it is meant to be, but it may not actually move there until you unlink it from whatever it is linked too at the moment.
If being linked to something has nothing to do with it lol, then maybe a temp workaround could be achieved by making a new object from the limb, removing the limb, rotating the new object and adding it back to replace the limb you removed.
Just some thoughts anyway.. Ill have a play around with those commands when I get the chance, but I use them in a similar way, I just make meshes from objects, add the limb, then rotate the limb and its always worked for me...
Here is some simple code that works for me :
dbMakeObjectBox(1, 0.5, 0.5, 50);
dbColorObject(1, dbRGB(255, 0, 0));
dbMakeMeshFromObject(1, 1);
dbAddLimb(1, 1, 1);
dbRotateLimb(1, 1, 0, 90, 0);
dbColorLimb(1, 1, dbRGB(0, 255, 0));
dbAddLimb(1, 2, 1);
dbRotateLimb(1, 2, 0, 90, 90);
dbColorLimb(1, 2, dbRGB(0, 0, 255));
dbDeleteMesh(10);
dbPositionObject(1, 0, 0, 0);
I will make a little "angle-finder" object, kind of like a 3D crosshair, that you can place around you world use to make calculations on position and angle etc...
The important thing is that its making an object box, which is a GDK object and contains 1 limb by default.. Limb 0.
I then make a mesh from that object, and add 2 limbs to the object. I then rotate both of those limbs, to put them where they are meant to be. I then delete the mesh that I no longer need and position the new object at 0, 0, 0 .... although this code doesnt actually take into account placing the crossover at 0, 0, 0 and fixing the object's pivot point.
EDIT : I didnt check scaling, but it wouldnt be hard to throw a dbScaleLimb command in there somewhere to see...
If it ain't broke.... DONT FIX IT !!!