Yes! Thank you for the info, mordentral! You’re absolutely right, the current system doesn’t correct rotations whatsoever. I was being a complete knob when I was replaying my rotation moves. I clearly did not fully understand how the base system worked. Now, the rotations occur locally and the actor’s rotation is sent through to the server via ServerMove in a similar way to the control rotation view data. It simply sets the actor’s rotation where the player controller’s rotation would usually be updated in the function. This is how the base system actually does it (which I was somehow blind to before), followed by the rotation interpolation for simulated proxies to fill in the gaps. The system now works pretty well.
I incorrectly assumed that the full transform would be set back to server’s authoritative transform whenever a correction was required, as that is how I did it when writing my own netcode in another project (kept both location and rotation server authed). It makes sense that the system focuses on positional authorisation rather then rotations from a gameplay perspective (cheating, hit detection, etc).
Now I just need to do a bit of refactoring to clean up the redundant code. Thanks again! I can now complete work on my prototype.