You are probably correct; you are getting called both by the Enter key and the onblur.
Okay, so why not simply have the Enter key move the focus to the next form field, which will of course cause the onBlur for the text field to be invoked?
Silly example (works only in MSIE, to keep it small), but clearly shows that the onBlur is *NOT* being invoked twice when you use this scheme:
<input name="t1" onBlur="this.form.copy.value += this.value;"
onKeyDown="if ( window.event.keyCode == 13 ) this.form.t2.focus();">
<input name="copy" readonly>
By the by...
(1) Why do you put the event handler for keydown on the entire document, instead of only on the field you care about?
(2) Why do you check for the event *being* keydown when the only way to get to the event handler is, indeed, via a keydown?