ok so lets forget the game instance part for now, you only really need that if you are using multiple save slots (can work on that later). i assume that your using the same gamemode bp for every level. if thats the case then in the menu widget just have the open level functionality and dont worry about the character stuff we will move that part to the gamemode. next open your game mode bp (create one if you need to and set it to be used in the project settings). in the game mode, from the on begin play event load the save data and copy over the rest of the script you had in the menu widget, everything from the load to the set location. that should get you working.
now ill try to explain why this wasn’t working before and now should work. lets say you have two levels; mainMenuLevel and Level01. when each level is opened it had its own character that was created and that only existed in that level, so one character in MenuLevel and another in Level01. the way you previously were attempting to set the character attributes you were targeting the character that existed in the menuLevel, then you were opening a new level which destroyed the MenuLevel character and created a new character for the new level01.
ok so the way i just instructed you to try out using the game instance. for this method we take advantage of the fact that a new game mode is created whenever a new level loads so that you are always targeting the character that exists in the current level. so when the game mode is created upon loading a level it runs the script which loads the save game data and affects the current character.