This turned out to be a problem in my code - being inexperienced with PDB files, I assumed that the compiler would output the first sequence point on the first instruction in a method's body. This is not the case: sometimes the compiler generates code for a function that doesn't map directly to original source code so the first 'user' sequence point may not be the first instruction in the method body.
I had to loop through all instructions in method bodies and look for the first sequence point with a meaningful line number - this radically reduced the number of hidden lines I got.