After a client joins when is it safe for a client to send an RPC to the server?

try setting a bool IsInit by the server on repnotify and then in the repnotify event the client should be ready.

i havent had the problem you have though, what i always do is have my playercontroller spawn its own pawn (rather than gamemode defaults) so i can pass through any variables i need set, duing this should ensure the player is set and therefore IsLocallyControlled should work