When would you ever need to restore a state, out of curiosity? If it's something like a pause menu could you not just halt the update loop with a bool pause value and fade the game to the background?
What we've got at the moment is the in-game graphics kept on screen while the menu is displayed. Essentially we have slide-menu that animates into view. While the slide menu is animating, we need to keep the game stuff rendering and updating. Only when the menu is fully visible we pause the game. Even then, the menu has animated features, which requires the occasional update for everything. To accommodate most of that, we have separate state enums that represent different phases of the menu animation. Naturally this incurs a lot of redundant code, as most the update logic in each state is
simiar, but not quite the same. Plus we have also a bunch of state flags to maintain on top. Doing this in C doesn't help either! Admittedly, the whole thing could have been better implemented from the get-go, but some game design decisions were introduced later in the project.
Moral of the story: If you go for a big state machine system, plan and set design decisions into stone as early as possible.
And draw nice flow charts.