When I first set up my shop, I had different shipping rates for different places. I'm in Canada and am required to collect Canadian sales taxes, so I also set up those. Then I decided to offer free shipping everywhere, and changed my shipping rates to a single zone with a free rate. What I didn't know was that that would erase the tax settings for Canada - so on my first Canadian order after I changed the shipping settings, Shopify told the customer it was tax-free and collected no tax.
The workaround seems to be to set up a separate shipping zone for Canada with its own free shipping rate, otherwise identical to the "rest of world" zone; then it's possible to re-create the deleted tax settings in the tax admin page. I'll be covering the unpaid taxes for this one order as a promotional gesture for my customer. I'm not happy to be out of pocket for that, but it wasn't the customer's fault and I'm lucky it wasn't a larger order and I caught the issue after only one order went through.
Posting this as a warning to others, because it's not obvious when changing shipping settings that the tax settings will be implicitly deleted. This issue would presumably apply to anywhere else that sales taxes are relevant, not only Canada. The tax settings are in a different part of the Web admin interface from the shipping settings and although there are hyperlinks between the two, it's not made clear that deleting a shipping zone also deletes any tax settings for the countries in that zone.