May have found a bug in virtual products handling, by virtue of the way PayPal handles addresses for virtual items.

Try setting your product as "Product Is Virtual" = Yes, Skip Shipping Address.
And make this small code change by adding in the new highlighted line exactly as shown:
/includes/modules/payment/paypalwpp.php, line 1661 (v1.5.0)
Code:
    // Check for blank address -- if address received from PayPal is blank, ask the customer to register in the store first and then resume checkout
if ($_SESSION['cart']->get_content_type() != 'virtual')
    if ($response['SHIPTONAME'] . $response['SHIPTOSTREET'] . $response['SHIPTOSTREET2'] . $response['SHIPTOCITY'] . $response['SHIPTOSTATE'] . $response['SHIPTOZIP'] . $response['SHIPTOCOUNTRYCODE'] == '') {
This fix is included in v1.5.1.