I have to agree with Danicco, this does not sound like a good use case for Singletons. Maybe your gamestate manager might be a singleton, but the individual game states probably shouldn't be.
Your gamestates probably should inherit an abstract base class with the following functions (pseudo code follows)
class AbstractGameState
{
void onEnter() =0;
void onTick(Time dt)=0;
void onExit()=0;
};
Now your derived classes implement these functions and as you transition between states, you call onExit() of the state you're leaving and then onEnter() on the state you're going in to. OnExit() will give your states the opportunity to either save state for when you come back to that particular state, if thats what you want. OnEnter() will give your states the opportunity to either reload a saved state, or reset the state, again depending on what you want.
Inside your game state manager, you can have a transition function to manage this for you:
void transition(AbstractGameState* toState)
{
myCurrentState->onExit();
toState->onEnter();
myCurrentState=toState;
}
Cheers,
Bob