When Bob receives the wire transfer in his own bank account, with the incentive fee added, he releases the funds from escrow via his client.
If the wire transfer info is already known, and supposing the bank can release online proof of the transaction being sent, why couldn't an oracle handle the escrow? In other words, the oracle is told where to look for the online proof (bank website, etc.), and it releases the BTC to Alice if the proof is posted in a certain time frame, or back to Bob if not. That way there is absolutely no way to screw anyone - unless the bank messes up. The bank is the trusted party, though it has no idea it's being used for that.
I appreciate the well thought out comment.
About an oracle - I had only vaguely heard about the idea. Indeed, if it's possible it should be much better, but whether it's possible is linked to the following comments.
Over the last several days I've been too busy to go further with this, but in odd moments I kept thinking about the central transaction process and it suddenly occurred to me there is, perhaps, a very big hole in the concept:
We have two sides: Bob send BTC. This transaction is BOTH irreversible AND verifiable - by the public, specifically in the blockchain, and therefore by any escrow agent.
Alice send USD. This is irreversible if, as designed, done by wire transfer (after completion), and verifiable by both Bob and Alice, but NOT by the public and therefore NOT by any escrow agent.
Bank transactions are very much designed to be private, that would not be something easy to "hack". Whether the transaction is via SWIFT or ACH or whatever, it is known to "trusted" banking parties and each client but not anyone else.
This fundamental asymmetry creates an opportunity for a bad actor. If Bob wishes to keep his BTC he simply denies the wire, even though he knows it went through. The escrow has no way of performing arbitration here, because any "record" that Alice shows would have to be a copy (no one will give the agent a login to their bank account to check it - and a screen grab has, ahem, certain limitations..).
The only solution I can currently see (and maybe I'm missing something) is if it is possible to get confirmation of a wire transfer externally. Something like, I give the ID number of the wire transfer transaction, and the bank or other agency sends back confirmation of the transaction and its amount. This seems like it can't happen, as it violates customer confidentiality. Or another way would be if a message which Alice passes to the escrow agent is somehow "signed" by the bank and therefore verifiable. As far as I know, banks don't use PGP signatures unfortunately...