Climbing the mountain.
I figured this one out finally.
One of the commenters on this blog suggested that the problem was caused by the fact that I was using the <asp:listitem> tag inside my <sdp:validatedinputcontrol> tag. I modified the control so that it used an ArrayList of values instead, and had identical results, so the “active schema does not support element '<asp:listitem'” angle appears to be a dead-end.
However, during testing, I found a property of the Page class that I hadn't noticed before (silly me!)--Page.Validators. This is a collection of all the Validator controls loaded on the page. I tested each one, and found that my RequiredFieldValidator was triggering as Not Valid.
Hmmm. A little investigation into the order of events.
Button Click:
Call to Page.IsValid from the Button Click event:
Page.IsValid references the child validator controls, which calls Control.EnsureChildControls, which in turn calls CreateChildControls.
In CreateChildControls, all of the child controls are created, but none of their properties are set. This includes the RequiredFieldValidator.Enabled property. Control returns to the Page.IsValid call at this point. Since the developer has specified a list of values for the user to choose from, my control renders a dropdown list. Apparently, the RequiredFieldValidator is unable to evaluate the dropdownlist, so it returns false. The Required Field Validator doesn't work the way I expected it to with the DropDownList. My assumption was that it meant that an item in the dropdownlist has to be selected before postback. According to this article however, you have to specify an initial value. The RequiredFieldValidator tests if the initial value and the new value are different.
YAY! Mystery solved. Now for what to do about it.
I'll either have to disable the RequiredFieldValidator in CreateChildControls if and only if the entry control is going to be a dropdownlist, or I'll have to roll my own RequiredFieldValidator that can handle a dropdownlist.