I finally got a solution working using mutagen. There is no CLI, but fortunately it takes very little code to accomplish basic tasks. For example, a very dumb CLI that takes three arguments, file, key and value, can be written as follows:
import sys
import mutagen
f = mutagen.File(sys.argv[1])
f[sys.argv[2]] = sys.argv[3]
f.save()
This could be turned, rather easily, into a decent front-end. (In my case, I don't actually need a general purpose front-end and I was already using Python to write a metadata file to feed ffmpeg, which made the switch to mutagen fairly straight forward.)
Setting the same key multiple times is a little wonky:
f[key] = [value1, value2, ...]
...but it works; key will appear multiple times, once for each specified value.
There are also utilities to help turn images into appropriate VORBISCOMMENT blocks, though I didn't use them, as I'd already written my own version for my prior attempts to use ffmpeg.