I think the community rubber ducky has helped me out here again.
After typing this out I realize that I have just missed the most obvious solution, and didn’t see what the actual problem is:
I am overlapping responsibilities of the state machines.
GameState is not responsible for player input. So, it should not be considered in that at all.
PlayerState can, in some situations, be overridden by the GameState. But that is easy - I just make a couple extra Player States for those situations, e.g. “MainMenuState”.
This way PlayerState retains responsibility on input and there doesn’t need to be any conditional checks, switch statements, etc. I suppose the end result is not very different from using some enumerator switches - in a way the PlayerState is linked to the Gamestate in that changes in the GameStates will necessitate updating the player states as well, however I find those sorts of changes easier to make if I am dealing with objects rather than having to pilfer through long node chains.