I know it’s quite an old post, but I encountered the same problem and investigated a bit. Here is what I found:
The problem arises when you save your PlayerController in the game instance; it stores the reference, not the data. So when you switch levels, the reference is lost, and the saved data are also lost. I tried everything, but there seems to be no way to store a copy of the player controller data. My workaround is to create a struct with string, bool, and int variables and copy over the data I need to store for the next level. Another workaround is to use “OnSwapPlayerControllers” in the GameMode. This event gets triggered every time you switch levels (via ServerTravel), and it provides access to both the old player controller and the new player controller. Here, you can access the old player controller and forward your stored data to the next level. This way, you can always bring your player controller data to the next level an infinite number of times.
There is another way as well; you can use “playerstat” to store the information you’d like to keep and then save it in the game instance. I’ll give it a try and update this post if it works well for me.
I hope this helps you all in the future.