Here's a possible solution. Unfortunately I can't test it with your exact configuration, since I don't have those details.
Perhaps you can test it and see what happens for you, and report back.
/includes/modules/payment/paypalwpp.php
Around line 1171 you'll see this block of code:
Code:
// PayPal can't handle partial-quantity values, so fudge it here
if ($order->products[$i]['qty'] != (int)$order->products[$i]['qty']) {
$optionsLI["L_NAME$k"] = '('.$order->products[$i]['qty'].' x ) ' . $optionsLI["L_NAME$k"];
$optionsLI["L_AMT$k"] = ($order->products[$i]['qty'] * $order->products[$i]['final_price']);
$optionsLI["L_TAXAMT$k"] = zen_calculate_tax($order->products[$i]['qty'] * $order->products[$i]['final_price'], $order->products[$i]['tax']);
$optionsLI["L_QTY$k"] = 1;
} else {
$optionsLI["L_AMT$k"] = $order->products[$i]['final_price'];
$optionsLI["L_QTY$k"] = $order->products[$i]['qty'];
$optionsLI["L_TAXAMT$k"] = zen_calculate_tax(1 * $order->products[$i]['final_price'], $order->products[$i]['tax']);
}
Replace it with the following block of code:
Code:
// check for rounding problems with taxes
$m1 = zen_round($order->products[$i]['qty'] * $order->products[$i]['final_price'], $currencies->currencies[$_SESSION['currency']]['decimal_places']);
$m2 = ($order->products[$i]['qty'] * zen_round($order->products[$i]['final_price'], $currencies->currencies[$_SESSION['currency']]['decimal_places']));
$n1 = $order->products[$i]['qty'] * zen_calculate_tax($order->products[$i]['final_price'], $order->products[$i]['tax']);
$n2 = zen_calculate_tax($order->products[$i]['qty'] * $order->products[$i]['final_price'], $order->products[$i]['tax']);
if ($m1 != $m2 || zen_round($n1, $currencies->currencies[$_SESSION['currency']]['decimal_places']) != zen_round($n2, $currencies->currencies[$_SESSION['currency']]['decimal_places'])) $flag_treat_as_partial = true;
// PayPal can't handle partial-quantity values, so fudge it here
if ($flag_treat_as_partial || $order->products[$i]['qty'] != (int)$order->products[$i]['qty']) {
$optionsLI["L_NAME$k"] = '('.$order->products[$i]['qty'].' x ) ' . $optionsLI["L_NAME$k"];
$optionsLI["L_AMT$k"] = zen_round($order->products[$i]['qty'] * $order->products[$i]['final_price'], $currencies->currencies[$_SESSION['currency']]['decimal_places']);
$optionsLI["L_TAXAMT$k"] = zen_calculate_tax(zen_round($order->products[$i]['qty'] * $order->products[$i]['final_price'], $currencies->currencies[$_SESSION['currency']]['decimal_places']), $order->products[$i]['tax']);
$optionsLI["L_QTY$k"] = 1;
} else {
$optionsLI["L_AMT$k"] = $order->products[$i]['final_price'];
$optionsLI["L_QTY$k"] = $order->products[$i]['qty'];
$optionsLI["L_TAXAMT$k"] = zen_calculate_tax(1 * $order->products[$i]['final_price'], $order->products[$i]['tax']);
}