I've been trying to dig into this a little, and workarounds to make OpenBGPD and OpenOSPFD usable. It looks like the core issues is FreeBSD only allows a single entry in the routing table to any given destination; when the interface is brought up you have a route to that network out that interface, but when a routing daemon learns that same prefix and updates the routing table, it overwrites the first entry. FreeBSD supports multiple FIBs now, but it looks like pfsense is built with only one, so I'm trying to find solutions within that constraint.
It turns out fixing OpenBGPD is easy - you simply add a "Metrix X" parameter to each of your defined neighbors with a value greater than 1.
I'm still working on OpenOSPFD (and ospf/bgp together). There's a "Metric" under the interface settings tab, but that's something different (it's the ospf interface cost). I'll keep this updated with what I figure out.