Is there a setting to prevent Paypal Express overwriting contact details with provided Paypal billing details?
I found a solution for PayPalPro by editing the code at line 277 in \CRM\Core\Payment\PayPalImpl.php

  'billing_first_name' =&gt; 'firstname',
  'billing_middle_name' =&gt; 'middlename',
  'billing_last_name' =&gt; 'lastname',


ie I added "billing_" at the start of the three Civi field names.  This is how received information from PayPal is mapped to Civi fields. With my change the name goes into the billing fields and not the main/primary fields.

In my case there was not a problem for the address fields, ie they were getting through OK to the billing address.

I've done this as a customisation for my site. If it's correct then this should be converted into a bug report so it's incorporated into the main code.  Anyone care to test?