For more info on Player State across sessions, take a look at the following:
https://blog.maide.ca/2016/02/26/ue4-persisting-users-across-disconnects/
I have built a very similar system to what you are trying to do. Here is how my system works. I put the stats in the Character class instead of Player State (though Player State should work fine as well). The only value I put in Player State is the unique Username that is used for lookups in the SQL database. Then when a player logs in, it gets their location/status/stats from a SQL database by sending a JSON request using the vaREST UE4 plugin to a JSON web service I wrote in ASP .NET. Those stats then get set on the Character class and auto-replicate to the clients. Then the Character class on the server is setup to send a JSON request back to the JSON web server every 20 seconds or so to update the current characters location/status. When I switch maps, I save the location/status/stats to SQL via the JSON web server, transfer the client to the new server/map, and then reload the location/status/stats from the new server/map.
Here is more info on what I built:
If you have any other questions, let me know.