Loading times will vary on all clients. Execution delays will never work in a packaged game. You have no way of knowing how long it will take for each client to initialize any given class, much less load a level.
When a client gets its copy of the controller call the loading screen. The controller should be handling the vast majority of UI anyway. It’s the only class on the client that’s truly persistent.
Use a Loading Pawn as the GM’s default Pawn and let it load this Pawn immediately. This pawns job is to check if the level has loaded enough to actually be ready.
When the level has loaded enough the Loading pawn can notify the controller which can then call up to the server.
Here’s enough of the spawn character function to get an idea of what’s happening.
From here the main character can notify the controller when it’s ready so it can remove the loading screen.