Closing the game will clear the RAM that the singleton is allocated to. No surprise with how that is working. You'll need to serialize some data and read it from disk to handle that case.
You could use the same method (save to disk, load scene, read from disk) to handle reloading the scene, but it's not a method I would recommend.
Instead of reloading the current scene, save your level as a separate scene from the main game entry point and change/reload the child node. That should prevent the singleton from being instantiated multiple times.