I think someone forgot to save the order after capturing the payment in PayPal’s function _registerPaymentCapture(). At least in my version, Magento 1.6.2.
You can check it in file magento\app\code\core\Mage\Paypal\Model\Ipn.php
$payment = $this->_order->getPayment();
->setShouldCloseParentTransaction('Completed' === $this->getRequestData('auth_status'))
I added this line after the previous code:
I’m not an expert in Magento, so I’m not sure if this is the best way to solve it. Anyway, it seems to work for me. Well, after reading almost every Magento forum on the subject, and many days of debugging .