I use Zapier to receive all PayPal IPN notifications so that I can perform multiple actions after getting an IPN message. This has worked beautifully until a few days ago after making some changes in my Cloudflare settings to tighten my security. I began receiving errors from Zapier when it tried to send the IPN to my website. After consulting with Zapier support (who were VERY helpful), it was obvious that something was blocking the IPN message.
To debug this, I turned off proxy on Cloudflare and re-sent an IPN message, which resolved the error. However, obviously I do not want to leave the proxy off. So I created a firewall rule to allow traffic when the URI contains the name of my PayPal IPN listener on my site. After enabling this firewall rule, I then turned proxy on again. Then I re-sent the IPN message, and it worked perfectly.
So if you are having a problem receiving PayPal IPN messages and are using Cloudflare, I hope my tips above will give you a simple fix.