We're using PayPal Payflow Edition and have run into a problem with PayPal Express and shipping addresses.
When checking out the customer has the option to select PayPal Express as the payment method. They are redirected to PayPal, login, select payment method, and choose a shipping address. I see the response pass the token back to Magento and Magento then asks for the details. I see the shipping address passed back to Magento. Now here's where it get's weird.
/app/code/core/Mage/Paypal/Model/Express/Checkout.php line 393
$this->_setExportedAddressData($shippingAddress, $exportedShippingAddress);
Jump down to that, method on line 682. It checks against the oldData. If there is a value for an address key in the oldData it doesn't care what PayPal sends over. It will ignore it.
This raises multiple problems.
1 - Customer clicks checkout with PayPal express and is never able to select an address, default address for customer is automatically attached. Now the customer is locked into that address and can't change it.
2 - Customer goes to onepage checkout and pays with PayPal Express, it will ignore the address provided by PayPal.
3 - No matter what you do, clicking the Change Address link on the PayPal Express Review page will never change the address in Magento.
Why are customers not able to change their shipping address. Seems like this is a bug to me ... links are there that say Change Address, but code doesn't care what comes back from PayPal Express because the address already has those fields populated.