I know this is an old thread, but I would like to put my experience here for others looking for the same, and maybe this does not apply then, but it applies now, at least in the sandbox, that I have not tested it in real transaction
When you add the items you send to paypal, you basically send this
L_PAYMENTREQUEST_0_QTY0 = 1
L_PAYMENTREQUEST_0_AMT0 = 1.00
L_PAYMENTREQUEST_0_NAME0 = my item 0 name
L_PAYMENTREQUEST_0_NUMBER0 = myitem0id
Then add another element
L_PAYMENTREQUEST_0_QTY1 = 1
L_PAYMENTREQUEST_0_AMT1 = 1.00
L_PAYMENTREQUEST_0_NAME1 = name of my item 1
L_PAYMENTREQUEST_0_NUMBER1 = myitem1id
Now add a coupon
L_PAYMENTREQUEST_0_QTY2 = 1
L_PAYMENTREQUEST_0_AMT2 = -0.50
L_PAYMENTREQUEST_0_NAME2 = my coupon name
L_PAYMENTREQUEST_0_NUMBER2 = mycouponcode
And then add the subtotals and totals
PAYMENTREQUEST_0_AMT = 1.50
AMT = 1.50
What I think Paypal does is announcements for all amounts of items so that it does something like
1.00 + 1.00-0.50 = 1.50
Then compares it with your amounts
if they match, it means that the client sees this as an additional element, but obviously with a minus sign, this is the image below from the paypal sandbox express check transaction
