This event gets called when a SeamlessTravel is detected before destroying the old Player State and after the New Player State was created, therefore you can use the “New Player State” to copy data over to it.
For instance you grab the current health and save it inside the “New Player State”
I don’t fully understand what you mean by “when to update player stats”, are you referring to when to update the Healthbar in the UI ?
If so, only update when it’s value changes (inside the OnRep_…)
There is no reason to do that with ServerTravel together as when you copy your properties onto the “New Player State” it will get replicated and call the corresponding OnRep_… functions which should broadcast your changes.
You can test in PIE by playing with multiple clients
Using “GetPlayerState[0]” is generally a bad idea in multiplayer context.
Get the player state from the controller instead.
Also place a breakpoint in Copy Properties to see if your values are correct. Make sure the “New Player State” is BP_GameCore_PS and if Health, InventoryItems, etc have the correct data.