ARGH! After all this time, I've found the problem.
If an outbound proxy is defined in an ITSP profile, then the STUN server DOES NOT WORK if "op=s" is specified in a voice gateway using that profile. I'm guessing that the STUN request is being sent to the outbound proxy instead of directly to the STUN server. The provider I'm using requires registration requests to be sent to the outbound proxy server, so I don't need the STUN server for that. However, I have voice gateways defined with the "op=s" (use STUN) option. If the outbound proxy is enabled, the STUN request times out. If I remove the outbound proxy, then STUN works! (But, in that case, I cannot register with the ITSP anymore, since they require use of the outbound proxy for registration).
I found this by setting up a STUN server on my LAN (stund under Linux). As I mentioned earlier, it obviously wouldn't give the correct results, but would at least help to see what the OBi110 is doing. When I had the OutboundProxy defined, and made a call with VG1 (with op=s), the local STUN server DID NOT receive any request, but I still saw the 40 second delay before the call started, typical of the STUN failure. So, it seems like the OBi110 made a STUN request, but not to the local STUN server. After I removed the OutboundProxy and made the same call with VG1, I saw the OBi110 make the request to the local STUN server and continue with the call.