In my case, all of the above tips checked out as “working”. Safe Mode showed the problem wasn’t with my profile, the Language Options were set correctly.
It turns out that my specific problem was that I’d selected Canadian English as my default language, but sudo apt policy hunspell-en-* indicated that only the US English dictionary was installed. sudo apt install hunspell-en-ca fixed my problem. I restarted Libre Office Write after installing the dictionary just in case, I’m not sure if that step was needed or not.
This problem was particularly vexing because the spell check claimed to be working but never flagged any of the purposefully wrongly spelled test words so very clearly wasn’t working. Just “Spell check complete” every time. As a programmer, functionality should never fail and be able to claim success.
I’m not sure how my system got into this situation, but I have a theory. I wiped and reinstalled from scratch Ubuntu 18.04 a few months ago. Then I restored various data from backup, including a number of spreadsheets and documents. I suspect that on my pre-wipe system, when I set Canadian English, it auto-installed the proper dictionary. When I opened an old document on my post-wipe system, the old settings in the document were used to update my new fresh profile, but the proper dictionary install step was not done.
Posted in case this helps someone else.