Indeed, the docs reflect what I intuitively expected:
1. forward price on the day, and if not, then
2. reverse price on the day, and if not, then
3. other things
In this case, hledger is choosing (Forward price on earlier Day) over (Reverse price on more-recent Day) when the P directives are given as (Forward prices..., Reverse prices....). This seems to directly contradict the claims in the docs.
When the P directives are (Reverse prices...., Forward prices....), then hledger seems to choose the correct price.
I could do more testing, but I presume this ends up behaving as "if there are only forward/direct market prices before today, but a reverse price today, I'll choose the most-recent direct market price (even though I should choose today's reverse price)". That's a guess at this point. I don't read Haskell well enough to confidently grok what's there.
I have a few more ideas for tests, but I'm not sure when I'll be able to try them. For now, for my purposes, it seems like I need to avoid mixing forward prices and reverse prices.