If there is a poison photo that's hanging up Save Metadata To File, here's a tedious divide-and-conquer method to identify it. It will take about 15 minutes (not counting the time waiting for Save Metadata To File to complete).
1. Go to All Photographs in Library Grid view (thumbnails).
2. Ensure the menu item File > Library Filters > Enable Filters is unchecked.
3. Do Photo > Stacking > Expand All Stacks. Now all photos in your catalog are displayed.
4. Set the option View > View Options > Compact Cells Extra > Index Number and then do View > Grid View Style > Compact Cells. That will number the thumbnails in grid view (in the upper-left corners of the thumbnails).
5. Open the Library Filter bar and add a Metadata column containing Metadata Status.
6. Select Changed On Disk and Conflict Detected:
7. On a piece of paper, right down "N = " followed by the total number of photos displayed.
8. Select the first N of the photos displayed and do Metadata > Save Metadata To File. Click Overwrite Settings if asked. (Use the thumbnails' index numbers.)
9. If Save Metadata To File completes:
- if no photos are displayed, stop -- you've successfully saved all photos' metadata.
- if photos are displayed, change N to the total number of photos currently displayed and go to step 8.
10. If Save Metadata To File doesn't complete:
- If N = 1 (you've selected just the first photo), then that first photo is the poison photo and you're done.
11. Restart LR (things in LR can back up internally when a task doesn't complete).
12. Write down "N =" followed by the old value of N divided by 2 (rounding up) and go to step 8.
In no more than 17 iterations of steps 8 - 12, you'll either have identified the poison file or successfully saved metadata to all of the files.