One thing to remember is that an object does not have, by default, controllers for every way it can be animated. Controllers are only applied once change in a particular dimension or field is applied. For example, an object placed into a scene has no controllers applied to it. Lets say you toggle the green button and go to frame 20, and rotate the object. A controller will now be applied to it, setting its rotation. But, since the controller did not exist earlier, it does not know what the orientation of the object was at frame 0, so the rotation is fixed across all frames. Of course, if you now rotate it back to its starting position, at frame 0, the controller sees a difference in rotation between frames 0 and frame 20, and calculates the intermediate positions for frames 1 through 19.
In a nutshell, set the initial orientation of all objects that will change in any way throughout the project in frame 0, with the green toggle on, before defining the changes themselves. If this is not the problem, the only other thing I can think of has been answered by RudySchneider.