<p>I'd like to zoom and unzoom in ways the base class doesn't support.</p>

<p>For instance, upon receiving a double tap.</p>

I'm answering my own question, after playing with things and getting it working.
Apple has a very-simple example of this in their documentation on how to handle double taps.
The basic approach to doing programmatic zooms is to do it yourself, and then tell the UIScrollView that you did it.
Adjust the internal view's frame and bounds.
Mark the internal view as needing display.
Tell the UIScrollView about the new content size.
Calculate the portion of your
internal view that should be
displayed after the zoom, and have
the UIScrollView pan to that
location.
Also key: once you tell the UIScrollView about your new contents size it seems to reset its concept of the current zoom level.  You are now at the new 1.0 zoom factor.  So you'll almost certainly want to reset the minimum and maximum zoom factors.