Finally got this working on my third or fourth work session. The issue appeared to be missing images from “uploads” folder. The solution was to make a new installation, use the same “app.yml” file, and restore from backup with dummy files for missing images.
In parallel to the original problem, I noticed after a previous upgrade various icons and images disappeared. When I tried to rebuild, the logs showed that the it quites after “optimizing site images”. I think it must have gotten stuck on a missed image and quit without logging that specific error. (there was no indication that missing images was the problem or what image files were missing).
In the end, I made a new Discourse install with the latest version. I restored from backup following directions here. It took me three tries.
First, the backup script errored out looking for uploaded files, so I copied in the uploads/default folder from my previous backed up files.
I ran the restore script again. This time it gave error that it couldn’t find a specific image file. I made a fake image file, gave it the same name and put it in the specified spot.
Ran the restore script a third time. Voila! My site was restored from backup and on the latest version.