The bug was a door that sometimes didn't open. Player hits the interact key, the server runs the logic, and most of the time the door swings. Under load, occasionally, nothing. No error, no log line, just a door staring back at you. Maddening, because it worked on every test until it didn't.
The cause was an RPC marked unreliable. In Unreal, an RPC is either Reliable or it isn't, and unreliable means exactly what it says: the engine will send it best-effort over UDP and quietly drop it if the network is congested. For a position update that's correct, you'll get a fresher one in 16 milliseconds anyway. For a discrete event that happens once, like "open this door", a dropped packet is a bug you'll never catch in a quiet test environment.
// the footgun
UFUNCTION(Server, Unreliable, WithValidation)
void ServerInteract(AActor* Target);
// what it needed to be
UFUNCTION(Server, Reliable, WithValidation)
void ServerInteract(AActor* Target);
The fix is one keyword, but the lesson isn't. Reliable is not free: reliable RPCs are ordered and buffered, and if you mark a high-frequency call reliable you can saturate the channel and stall everything behind it. So the rule I've settled on is simple. Continuous state that's superseded every tick goes unreliable. One-shot events that must land go reliable. Pick deliberately, because the default behaviour under load is the part nobody sees in the editor.