This looks like a codegen problem. Slight alterations in druntime's src/rt/cover.d hides the problem.
First, dmd's a20 test illustrates it. When run without change, the .lst file is place in test_results/runnablerunnable-a20.lst rather than test_results/runnable/runnable-a20.lst -- missing one of the separators.
Adding printf's inside appendFN to show the results == no bug.
Adding a temporary to pull the string assembly out of the fopen call at line 165 (only fopen in cover.d) also makes it go away.
For now, disabling all coverage tests on freebsd.