So yeah what you are doing ain’t gonna work reliably because nothing guarantees BattleBegin ever happens on clients since you are changing to Deployment quickly after.
A quick solution to the bug would be to change your check for removing loading screen.
Enums are convertible to byte (which are small integers), so instead of doing this :
//OnRep_State
if (State == BattleBegin)
RemoveLoadingScreen()
You could do the following instead (maybe need to convert to byte type in blueprint) :
//OnRep_State
if (State >= BattleBegin)
RemoveLoadingScreen()
Now this should handle players joining late and even in the middle of the game if necessary.