I was able to clear up the top level confusion easily enough by doing a diff on directory listings from the top level directories, but that still left issues with subdirectories that had the same names but different contents. I thought I’d be doing the project forever. I tried a couple different tools to help. Path Finder was the nicest UI that I worked with, but it still only supported manual comparison and synchronization of the two directory trees.
I finally broke down and looked harder, and found an amazing tool, DeltaWalker, that seems as though it were designed for exactly the nightmare I faced. Point it at a pair of directories and it will highlight all the differences between them–missing subdirectories on one side or the other, or subdirectories whose contents are different in the two different locations. You can filter the output, too, so that you only have to see the differences that you care about (I didn’t need to know how many folders were in my target directory and not my source). And when you find files that have to come over, it’s a button click to make the move.
Once I found DeltaWalker, it took only about an hour to finish cleaning up the mess that I had started over six months before. It’s an awesome tool, and one I can’t believe I had never seen before.