Hi Corey,
IPN is an asynchronous process, and PDT is synchronous. When your customer pays at the PayPal website, IPN Notified event is fired asynchronously at thence. After the payment when your customer comes back to your website, PDT event fires. If your customer closes his browser before he comes back to your website then PDT never fires but IPN fires as the customer has no control over the IPN event life cycle. So, appearantly IPN fires before PDT. But sometimes, PayPal dont get http 200 ok from your website (for some reason) and then paypal thinks that IPN was not fired properly, then PayPal send IPN again after a while. In that case, there is the chance to get PDT fired before IPN.