Okay - so the first the original Parser issue:
The output looked odd - it showed multiple entries with the same type, field, and reader, but null and DefaultParser.
When I quickly switched the code to use DefaultParser instead of null, those extra entries went away, and it just showed the segmentreader and directory reader that were doubled up. Thats what had me thinking that was involved. I'm not sure I understand why that was happening now though.
Anyway, all of the issues appear to be because the test code was written expecting all of the readers to be top level.
The tests, in certain cases, use a Reader to grab from a fieldcache - that reader has to be the right subreader and not the top level reader -
the tests were just using getSequentialSubReaders - they need use gatherSubReaders instead - because you introduced the multi level reader stuff. They should have used gatherSubReaders from the start, but because it wasn't needed at the time (for the tests to pass), it didn't even occur to me.