On further analysis, I have found a bug in IE8. The problem, as you correctly discovered, was that my html had a form within a form. However, this state of affairs was not how I had constructed the page.
My page was loaded into memory correctly, as a single xhtml form. However, when I assigned that text to the innerHTML of my page container div, IE changed the structure, and moved the endform element to make the resulting html incorrect. Further processing compounded this error to insert the nested form element.
It turns out the problem was that I had a button element as the last element in the form, but specified as follows:
<form><div>...<button ... /></div></form>
IE turned this into
<form><div>...<button><div></div></form><div></div></button></div>
This put the closing form tag in the wrong place.
I corrected the problem by specifying the button with an explicit closing tag:
<form><div>...<button ...></button></div></form>
-- Larry