Instancing a scene will return the instance, save it to a variable and keep that variable around (e.g. by storing it in an auto-loaded script) and you're good to go.
Alternatively you can store the path to where you added the instance in your tree, get the node each time and use that instead. That ensures the scene still exists.
Not sure why you have a PlayerSingleton whatsoever, sounds wrong to me.
If you're having any trouble implementing this, feel free to ask. But as you haven't provided your code, I cannot give you a more concrete example for now.