Seems entirely reasonable to me. I'm working my way through Nerdy Nights and took a similar approach for flags.
Although I wonder why I haven't seen other people using BIT for this:
LDA #8
BIT buttons1
BEQ MovePaddleDown
As far as I can tell, it's identical in cycles and bytes, so is it just a matter of taste or is there a drawback there? I guess the only benefit I see with using BIT over AND is that A is left alone, in case you wanted to use the same bitmask right away.
With the game states though, I probably wouldn't represent it at a bitfield, since the states are actually mutually exclusive. You won't ever have a state which is GameOver & Credits & Paused, for instance.
The approach I'm planning to use in my NN Pong is that "State" is just an address and then I do an Indirect JMP once per frame to do the updates. Sadly there's no indirect JSR. You also couldn't do a jumptable of states, since there's not even indexed JMP. Could be some drawback to this plan, but I guess that's what this whole phase of learning is for.