I have removed some of the details from your direct pay request because I didn't know if you intended on posting them. When I search on this error it says that it could be happening for a number of reasons. Since you are getting success on the Express Checkout it seems that things should be setup correctly. The only thing I can think of is that the item information you are sending is causing this error to be returned somehow.
Here is the item information from the request:
<PaymentDetailsItem>
<Name>Letterhead w/bleed</Name>
<Amount currencyID="USD">257</Amount>
<Quantity>1</Quantity>
</PaymentDetailsItem>
Do you get this same result if you test with an item that has different values? Just looking at this I'm not sure if the w/bleed is valid, it could be this part that is throwing things off. Please try this out with a couple of different items to see if you get the same result. Also, if you could test with different buyer info like the credit card and billing details this would also help to determine where the problem is. Please post back with whatever results you get.