After another round of extensive troubleshooting, it turned out that everything I had done on the pfSense side was correct all along.
The 1:1 NAT with static Outbound NAT rules were working perfectly fine.
One thing I did not mention in my initial post, was the fact that I am also using DNS Resolver in my DMZ.
This is done so that any softphone clients using my guest WiFi network, will be able to resolve the IP address of my PBX to the internal IP, rather than the external.
While the PBX itself was configured with static IP address and using public name servers, it would somehow still resolve the PBX name to the internal IP, rather than the public IP.
I don't know if there is a bug in the OS where FreePBX is running on, or a configuration error or something else. This is still a mystery to me, which I am trying to figure out.