JayW Sorry, it seems that Spinebot has explained the behavior of rotation for older versions (up to 3.8). Starting with 4.0, if you want to offset a 360 degree rotation, you need to set the rotation value back to 0 just after reaching 360 degrees, as shown below:

In the example animation above, three keys have been added: a key for rotation of 0 degrees at frame 0, a key for rotation of 360 degrees at frame 29.9, and a key for rotation of 0 degrees at frame 30. In this way, by returning the rotation value to 0 in a very short time, it is possible to achieve a very smooth 360-degree rotation:

To place keys on a fractional frame such as 29.9, either press the Shift key to disable frame snapping, or type the value directly into the Current field in the Dopesheet view and move the Timeline bar:
