1. Actually there was why I removed the minScore. There's no point in evaluating minScore with current score because it's been evaluated again in insertWithOverflow. You don't lose anything by just populating reusableSD and calling insertWithOverflow. For that reason I removed collect() from TopFieldDocCollector. To me it looks like a cleaner code, and gain, performance wise, you only make the same comparison twice.
2. That's a good one.
3. Initially I thought TopFieldDocCollector would use it as FieldDoc (which extends ScoreDoc) and using TopDocCollector's collect() method. Then I implemented a protected newScoreDoc(doc, score) which was overidden by TopFieldDocCollector. That way, if TFDC uses TDC's collect() method, all it needs to do is override newScoreDoc(doc, score) to return a FieldDoc.
4. Initially I implemented top() the same as you did, but then there were tests that created a PQ of size 0. However, with the change to initialize, it is safe to do it.
I think that TDC and TFDC as I put them in the patch are extended cleaner and that way we don't do any extra logic (that's the reason why you would have needed to write the comment in TFDC's collect() method about simply comparing the score. Please re-consider my changes.