add the following code to the failure page so we can investigate why it fails with that code:
<?php
echo "Full Request: ".(isset($_SESSION["PP_DirectPayment_postedValues"])?htmlentities($_SESSION["PP_DirectPayment_postedValues"]):"n/a")."<br />";
echo "Full Response: ".(isset($_SESSION["PP_DirectPayment"])?htmlentities($_SESSION["PP_DirectPayment"]):"n/a")."<br /></p>";
?>
that code only concatenates the first name and last name together, the shipping name field has a limitation of 32 characters, so really the only reason I can think of for that code to cause it to fail is if the first and last name together where more than 32 characters.