Which means (I think) that there may still be a bug in the SD library related to where the root directory file object is created.
Not likely. You just are avoiding the real problem by getting a fresh copy of the root file object. when you open root, SD.h just gives you a copy of its internal root object.
I will try to do some more testing on the weekend.
At this stage I seem to have posted SD directory reading code that works and code that does not work within my application when everything else remains unchanged. I accept that the logic of my code suggests both types of code should generate the same result - but they do not but I guess my code cannot be corrupting an SD root directory file object if it is not permanently instantiated while the application is off doing other things. Perhaps my application in those circumstances is corrupting other things that I have not yet discovered.
Anyway - until the weekend.