The ipaddress fact used to return the main IPv4 address of the system in FreeBSD. Pretty basic I guess, but with Puppet 5, it's broken.
With Puppet5, if there are loopback interfaces (e.g. lo0, lo1) in addition to the usual Ethernet interface (e.g. em0, vmx0, etc), one of the loopback addresses is returned instead. This is obviously wrong and alters an expected behaviour that has been around since Puppet 3 or even before.
Apologies that I cannot really pinpoint or patch the error, but the C++11 code is difficult to grasp. Doing puppet facts --debug yields nothing that could be of any help.
Also, "facterversion": "3.13.2".