Looking at the dpinger log, it is clear that there are no probes responses actually being received. The reason that it shows as "up" initially is because dpinger cannot declare any packets lost until the initial expiration of the loss interval (2 seconds). Beyond that, it's just how soon the page is refreshed.
So as to the source of the problem, something is dropping either the ICMP echo request or the ICMP echo reply. The first thing I would recommend is to try setting the dpinger Data Payload to 1 in the Advanced section of the Edit Gateway page (System / Routing / Gateways / Edit). If this fixes it, it means that some network element in the path simply has a defect in the handling of ICMP packets. It's not a problem to continue running with a small data payload.
If setting a Data Payload doesn't fix it, it likely means that some element along the path is actively suppressing ICMP echo packets. To determine where, you would need to start exploring with ping and traceroute. An example for ping would be:
ping -S src_addr 8.8.8.8
For src_addr use the IP address of your firewall (same as the -B parameter to dpinger). If you want to mimic the behavior of dpinger, you can add a size parameter:
ping -S src_addr -s 0 8.8.8.8
An example for traceroute would be:
traceroute -s src_addr 8.8.8.8
By default traceroute uses UDP packets. To use ICMP packets instead, you would use:
traceroute -s src_addr -I 8.8.8.8
Traceroute allows you to specify a packet size, but does not allow a zero size payload.
Additional options for ping and traceroute can be found in the FreeBSD man pages:
https://www.freebsd.org/cgi/man.cgi