IPN won't stop payments from going through. Paypal posts to IPN after a payment goes through. So there is definitely a possibility you don't have it set up right. If you go to your paypal IPN settings you can see posted payments and any error results. It is possible your button is overriding the IPN page setting as well.
I'd put a call on the top of the page:
file_put_contents("test.txt","Hello World. Testing!")
That will write a file if something accesses the ipn page and tell you if it is getting hit or not.