As a matter of fact I stand corrected, the sandbox DOES send the IPN automatically. I just did not have mine set up correctly. So I am able to test the entire app in the sandbox - from app to paypal sandbox, make payment using test buyer, return to app, retrieve PDT, and then IPN gets sent.
All you have to do is configure the test seller account in the sandbox exactly like you would in the live environment - i.e. turn on and configure IPN and PDT. One thing I came across is that when you try to access the Profile in the seller account that it can be flaky. So I always right click on Profile and open up in a new window or tab. It may fail 4 or 5 times before finally it lets me in to configure IPN and Website Payment Preferences.
Obviously use the test seller email account to make the sale, and use the PDT token in that account. Point the app to the sandbox.paypal.com in the button (confirm.php) and in the success.php and ipn.php files. And you have to use ssl in the pdt code for some reason in the sandbox.
I'm logging all data returned by PDT and IPN into their own respective tables so I can use this for debugging and more importantly so I have a record of each transaction with Paypal. I'm working on code to make use of it all now.
Took me a while to pull all of the pieces together but now that I have it, it works like a champ and is quite easy to understand. I think making use out of that data may be the difficult part but we'll see.
If you need additional info or help let me know