If the application exits before the save completes then it will fail. I had an issue on iOS where I was trying to save the game in GameMode::LogOut and this failed every time I think because the application was killed before the save could complete. Once I moved my saving code to an in game button it worked perfectly. The odd thing was that calling my save game function from GameMode::LogOut on PC worked perfectly fine, it was only on iOS that it failed to save properly. This must have been due to how LogOut worked on iOS versus PC.
So to answer your question, don’t save in GameMode::LogOut and there are no rules about where you can put it. Put it anywhere where there is no risk of the game getting killed before the save completes like an in game button, or a timer that fires every minute or so while the game is running.
It starts before a lot of other things and can read in the save game.
It’s visible everywhere, so easily accessible.
You can read the save game into a variable at the start and just write to that variable from everywhere else. The game instance can write the data back to the save game file on timer.
The only slight fiddle is you have to cast to get hold of the variable from outside the game instance. But that also goes away if you get it using a blueprint interface.