One thing to consider is that when clients are created their player controller is created for them that is defined in the game mode.
If you make a BP_PlayerController_Gameplay you could then spawn their character and possess on the beginplay of the player controller.
This might have the problem of the level not being entirely loaded on the level though since the player controller exists on the server and the client.
So you might need the begin play node to run an RPC against the server. I think beginplay for the player controller won’t happen on clients until everything is loaded. You know if it is “your” player controller by checking that playercontroller(0) = self on the player controller.