My thoughts were to split the triggers and have init run on startup and periodically to check item states vs metadata and update of different. Then have the recalc function keep its midnight and time changed triggers.
Something else that just came to mind: if you add an item at runtime a trigger won’t get added for it. To get around that with Eos I generate the when triggers dynamically at load time and have a reload switch item to avoid having to restart OH. That might be overkill for something like this though.