Can you change the Parameters value for currencyCode and Amount, From
"¤cy=USD" + "&AMOUNT=" + Amount
to
"CURRENCYCODE=USD" + "&AMT=" + Amount
Have a look at RefundTransaction API Operation (NVP).
May be PayPal is looking for AMT
parameter which is not there, which is why it is refunding in Full