Unless BitPay have changed their policies, the exchange rate is only locked in for 15 minutes. If the transaction doesn't get its first confirmation before then, it expires and if the exchange rate goes up even slightly they consider the transaction underpaid. That's almost certainly what happened here. They used to be more sensible and only require the transaction to be broadcast to them within the 15 minute window, but they quietly changed it a few years back.