The light bulb goes on...
The [vwait] man page says "until some event handler sets the value of
variable varName". All this time I had been misinterpreting that to
mean "changes it from an [unset] state to a [set] state", but today I
discovered that any call to [set] triggers it, even if it doesn't change
the value. I don't have to prepare with [unset -nocomplain ::Foo]
after 1000 set ::Foo 1