Unreliable RPC stops being received at all

I’m setting up player control for a networked VR game. For a number of reasons, the most sensible setup is for the client to send their headset position and their controller data seperately.

To do that I have 2 functions on my PlayerController to send updates:

UFUNCTION(Server, Unreliable, WithValidation)
void ServerUpdateWorldTransform(float DeltaTime, const FTransform& HeadTransform);    
UFUNCTION(Server, Unreliable, WithValidation)
void ServerUpdateControlledDevice(uint8 Inputs, const FTransform& Transform);

which the client calls every tick where one or both have changed (which is most ticks, obviously).

I need this motion to be as up-to-date as possible, but it doesn’t matter if a few frames are dropped so it seems like an unreliable RPC is the way to go.

In an empty level with absolutely nothing else of interest going on, I’m seeing the ServerUpdateWorldTransform() call go through as expected, but after a couple of updates when the player connects the ServerUpdateControlledDevice() calls are getting completely dropped, even when its NetPriority is raised to 5.0 and its NetUpdateFrequency is raised or lowered.

Assuming somehow 1 local and 1 remote pawn are managing to saturate the connection, how do I debug this? Why is 1 identically decorated call always going through and 1 always being dropped? Is there a better way to ensure these updates get through reasonably?