I resolved the issue myself but decided to post here anyway in case it helps someone else.
I have an Android 13 phone with Koodo prepaid plan. Mobile data works on the phone itself, APN configured as specified at https://www.koodomobile.com/en/help/setting-data-your-non-koodo-phone
Mobile hotspot and USB tethering can share a WiFi connection but not the mobile LTE data.
Settings > Network and Internet > SIMs > Access point names

I believe the entry labelled “TELUS ISP” of type dun is the source of the problem, but it cannot be edited or deleted, and I cannot create another entry of type dun to override it.
Solution
Edit/create the APN specified at https://www.koodomobile.com/en/help/setting-data-your-non-koodo-phone
and change MVNO type from None to GID (IMSI also works)

For whatever reason this causes the other entries to disappear, and mobile data sharing via hotspot or tethering now works without issue.