Well I wound up with something like with my method. I decided to drop the keyboard entirely, and make it only playable through the Game pad for simplicities sake (wouldn't have been to hard to add really). I also dismissed the multithreading and buffering concept as overly complicated and retarded.
The end result was it didn't poll every key (obviously), just the ones it was told to poll and then fired the related event if they came up as having changed, but it was still a pain and a half to keep logic and input separate, which was what I was trying to do.
Still meant I couldn't really change input 'on the fly' like I really wanted (as that'd still require polling every single button), and neither could your method since, again: still would need to poll every key to figure out what they just pressed to change the control scheme.
On the plus side it was fairly reusable and I was able to make PacMan, multiplayer Space Invaders, Pong, the usual test projects with it, alongside the Screen system I hacked together, before I decided I was too ashamed of it and scrapped it
Still, yeah, I'm just being awkward in my event-based-ways...Still, if you're going to provide networking like you said, isn't it generally best to try and separate input and logic in those situations?