This doesn't really answer the question. This illustrates a checkbutton which has different bitmaps for its selected and unselected states. A checkbutton, however, has persistent state. What I need to do is have a regular pushbutton which changes its button bitmap, in a persistent fashion, both in response to UI actions and to remote commands not involving the UI, and which may have more than two visual states.
I've subsequently discovered that there is, indeed, a simple way to do this; but the documentation of the method is somewhat obscurely buried in Tk::options. That method is as simple as this:
$button->configure(-bitmap => 'MyNewBitmap');
Using this method, I now have multimode buttons that change their button image and foreground color as appropriate depending on what the application is doing, exactly as I wanted.