When loading my Bluebird off my UnionPay BEA debit card there's definitely a gap between the mid rate and the rate charged. Previously I'd assumed it was BEA taking that ~0.5% off the top but someone here said it was actually UnionPay. I checked the UnionPay site to find that it was indeed the rate they were charging, so at least when using a UnionPay card in the US it's UnionPay doing the currency exchange. (is that the correct assumption to make given what I've seen?) If I still had my UnionPay/JCB credit card I'd try that out too, but it was too much of a pain to use in the US.