犯人はprototype.js
落ち着いて考えたらそんなわきゃねーと思いなおし、prototype.jsを見直してみたら、ちゃんと書いてありました。
observe: function(element, name, observer, useCapture) { var element = $(element); useCapture = useCapture || false; if (name == 'keypress' && ((navigator.appVersion.indexOf('AppleWebKit') > 0) || element.attachEvent)) name = 'keydown'; this._observeAndCache(element, name, observer, useCapture); },
IEのDOM要素にはattachEventメソッドがあるはずなので、nameに"keypress"を指定すると"keydown"に書き換えられちゃうのね。納得。IEに非があるわけじゃなかったのね。ごめんよIE。でもなんでこんな風になっているんだろう?真相へはまだ至らず。