犯人は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。でもなんでこんな風になっているんだろう?真相へはまだ至らず。