To partly answer my own question it would appear that the wrong terminology is being used in the Express Payment Code.
Here is a snippet from the standard PayPal Pro code that is created on the confirm.php page
$PP_PayProUK_required[0][$nextIndex] = "USER";
$PP_PayProUK_required[1][$nextIndex] = $i8_username;
$nextIndex = count($PP_PayProUK_required[0]);
$PP_PayProUK_required[0][$nextIndex] = "VENDOR";
$PP_PayProUK_required[1][$nextIndex] = $i8_merchant;
$nextIndex = count($PP_PayProUK_required[0]);
$PP_PayProUK_required[0][$nextIndex] = "PARTNER";
$PP_PayProUK_required[1][$nextIndex] = "PayPalUK";
$nextIndex = count($PP_PayProUK_required[0]);
$PP_PayProUK_required[0][$nextIndex] = "PWD";
$PP_PayProUK_required[1][$nextIndex] = $i8_password;
according to the documentation this is correct as it contains the USER, VENDOR, PARTNER and PWD fields.
Now compare that to the following code created on checkout.php for the Express Payment Button
$WA_PP_ECO_Set_params[0][$nextIndex] = "Username";
$WA_PP_ECO_Set_params[1][$nextIndex] = $i8_username;
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Password";
$WA_PP_ECO_Set_params[1][$nextIndex] = $i8_password;
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "Signature";
$WA_PP_ECO_Set_params[1][$nextIndex] = $i8_merchant;
$nextIndex = count($WA_PP_ECO_Set_params[0]);
$WA_PP_ECO_Set_params[0][$nextIndex] = "System";
$WA_PP_ECO_Set_params[1][$nextIndex] = "UK";
As you can see the naming convention is not the same, why ?