Little bit of progress to report.
Managed to integrate the n patterns for f mod 8 into the f-2 div 40 iterative search with reasonable performance improvements.
Pics attached show detailed output for c=6107, a portion of all test cases (with full output available at pastebin.com/3DvFwQmu), and an updated code snippet showing start and step values for n that now also includes patterns for d mod 8.
On the performance side, these revised tests have about 50% fewer iterations than the previous f-2 div 40. A few examples of the iteration improvements:
c=6107 from 23 to 10
c=208364311 from 3706 to 1853
c=9874400051 from 11 to 6
These improvements are a result of a few things:
1) Certain f mod 8 and d mod 8 values enable consistent n+4 jumps between records.
2) The fm2 factor and rm factors are now calculated directly from n0 and the (nn-1 + 2d(n-1) + f) formula.
3) This enables the initial n0 calculation to match the valid known n start.
4) Once in sync with starting n, triangles are created using the methods described previously. (1 + 8 * T(fm2_factor * fm2_chunk) + fm2_mod + 8 * (rm_factor * fm2_chunk) + fm2_mod)
5) The next valid n is then determined from the current n0 and f and d mods using the GetNIterateSettings method.
6) A side benefit is that f-2 div 40 chunks are no longer necessary and have been replaced with f-2 div 8 chunks.
For f mod 8 values of 0, 4, 5 and in some cases 1, the performance is still stuck at n/2. Unless we can figure out a few more patterns in how f and d mods affect valid n values.