I've found that with a transitional game state set, pushing a new state then popping it back results in a new copy of the previous state being pushed onto the stack. Behold my hypothetical situation:
- TitleScreen
push_game_state OptionsMenu
- OptionsMenu
- TitleScreen
- TitleScreen
- TitleScreen
I can't quite pinpoint it, but it seems to be a logic error in either GameStateManager#pop_game_state or #switch_game_state.