>>753 レスありがとうございます。
ひょっとしてキーボードでもポーリングが必要なのかと思い試してみましたが、結果は同じでした。

別のマシンで実験したところ、現象は長い時間起きませんでした。環境に左右されるっぽいです。
updateKeyboardState() が成功しても、キー状態は必ずしも取得でるとは限らない…、ということなのか。
押しっぱなしと押し直しで、挙動が大きく変わるアプリの設計がそもそもまずいのかなぁ。
と思ってきました。