How about a very limited type of exchange within the main chain:
Every block contains a price inserted by the miner. A block solution must contain a signature on a standard contract using the coinbase output keypair. The contract is an option to:
buy at the quoted price plus a standard spread (e.g., 1%)
or
sell at the quoted price minus a standard spread
an amount of the underlying commodity equal to the block reward. The option expires in 10 minutes(?) and can only be exercised by solving a block with this block as its parent. To exercise such an option, a miner must set a special flag in the next block. The two miners have to find each other and settle up (no need to specify how) before either can claim his block reward. They must both sign something using their coinbase keypair and submit the signatures to the network before the network will recognize their block rewards.
Perhaps the spreads don't have to be standard, the contract can specify any prices straddling the quote. Miners would be motivated to offer good terms in order to encourage the network to accept their blocks and thus validate their rewards.
There is, I believe, a much simpler way to exchange between bitcoins and stablecoins.
If the stablecoin protocol has visibility into the bitcoin network, then stablecoin users can mark their coins as "for sale" in the network, along with a bitcoin address and price.
When the stablecoin network sees bitcoins go to the address, it releases the stablecoins to the buyer.
There are a couple issues to work out, but I believe it would work. One issue is what happens if two bitcoin users try to buy the same stablecoins at the same time (answer: a buyer could send a tiny amount of bitcoins to "lock" the coins before sending the bulk of the coins. The first person to lock the coins has the right to buy them for a set amount of time.)