At the end of the day, you can use whatever you want. Just be aware of the potential issues for using them; so you can avoid pitfalls and problems during development.
For example, some developers will adamantly state not to use Singletons at all. And I would argue that advice is as useful as those who overuse Singletons. The best path is the one which works for your project. The key is understanding both sides, and the reasons why. Find a balance. Singletons are very useful, but do not overuse them.
So in this case, the GameSingleton can work fine for what you want, but can have problems which might cause headaches later one. In other words, just as Marc described, you may reach a point in your development where everything seems fine, then once you go into a Standalone or Packaged version of your project; things might suddenly break from using it.
If you are aware of these problems early on, you can deal with them and avoid them.
If not, you will have some refactoring ahead of you.
As for that article about Asynchronous Asset Loading; it recommends a Singleton but only mentions GameSingleton as an example.
GameInstance can achieve the same thing.
As for this:
I don’t know what is meant by “too high level,” but trying to find a magical object that gets instantiated at the right time isn’t good practice. This sort of dependency can easily break your project at a later point or worse cause unintended behavior.
It’s important to know the order different systems and objects are instantiated at runtime, so you can guarantee things will work when you need them. In other words, you need to control when you want things to be instantiated.
In this case, you can easily use the GameInstance class and just write an Initialization method to load everything when you need it (when the actual game starts), then be sure to also have a Shutdown method to close it all down.
Or better yet, if it’s only needed during actual gameplay use GameMode. Just be aware, if it’s multiplayer and all players need access to this data, the GameMode only exists on the server.
Basically anything you use will have its problems and benefits. It’s important to be aware of these for whatever case you decide to use. Most often you won’t figure those out until after using it.