Ok, for lack of time and other options, I've fubbed the script - and got it to work.
Instead of
modalPopup.Show();
I inserted the following:
ClientScript.RegisterStartupScript(this.GetType(), "ModalPopup",
"var done=false; Sys.Application.add_load(function() {if (!done) {AjaxControlToolkit.ModalPopupBehavior.invokeViaServer('ctl00_MainContentPlaceHolder_ModalPopupExtender1', true);} done=true; });", true);
Brutish, perhaps, but it worked. Perhaps the next release can have a "run once" attribute for the server call...