Just send the amount Alice agreed to pay along with the request. If the price has increased since Alice sent the request, you send a response indicating that the item could not be purchased at or below that price, and the current price is whatever it is. This is pretty much the same situation as when there's only one item available and, at the time the request to buy reaches you, the item has already been sold.
So your message flow would look like:
Bob → Server Set item price to $10
Alice → Server Tell me item price.
Server → Alice Item price is $10.
Bob → Server Set item price to $20.
Alice → Server Purchase item for $10.
Server → Alice Item not available for $10; current price is $20.
This is, in fact, exactly how things work in trading systems connected to exchanges. (I wrote one about ten years ago.) You never know what bids and offers are currently on the exchange; you know only what was there a few milliseconds ago. And even if what was there is still there now, it may not still be there when your order reaches the exchange.