The rotation update function was running on all machines, including simulated proxies, causing them to fight between local interpolation and the server-replicated rotation. Fixed by early-returning for simulated proxies so only the server and owning client run the logic. The server computes and replicates rotation for simulated proxies to display to other players, while the owning client computes it locally for responsiveness since SetActorRotation is not predicted, so it would lag behind by a round trip. Without the early return, simulated proxies would calculate their own rotation locally while also receiving the server-replicated rotation, causing them to fight between the two values and produce jittery behavior.