I'm running docker engine on Debian bookworm. No compose, desktop or any addons -- just the docker engine. It turns out there was a typo in my startup script. Correcting the typo and re-starting the container fixed the problem. The server is now using the correct time zone.
Interestingly enough, the guide data for my local channel lineup has the correct UTC offset, so setting a TZ doesn't matter all that much. The guide displays properly and season passes record at the appropriate time. I was running this server for about a week before I realized things were off.
Late night 'On Later' entries were appearing in the 'tomorrow' section and creating advanced passes by matching times resulted in empty schedules.
In any case all is well now.