no, it's simpler than that. You don't need a timer.
In onUpdate, you know the time as you're displaying it. Check the current hour against the last time you checked the location. If it's been more than X hours, check the location again.
Finally I came up even with simpler solution: shared locate() function in app, launched from:
1. View: onUpdate refresh location daily for sunrise/sunset times even for watches without background process support (as you suggested)
2. Background: onTemporalEvent gets location before reading weather forecast
Boolean in locate(save) disables saving location as property from background, that would lead to crash.