А кто добавляет задачи? Если внешний код — вообще красиво, добавляем в него и свой кусочек, и при делании чего-то с базой просто спрашиваем у БД, что там напланировано еще сделать, затем у at запрашиваем текущий список запланированного к выполнению, сравниваем полученные данные, и выдаем нужные команды, которые приведут список at-заданий к тому виду, как оно вам нужно.
И тогда получаем разделение — и mysql «дергается» (хотя, какое это дергание?) только по факту изменений в нем, и планированием занимается стандартная утилита (уж явно она это сделает не хуже самописного демона).
Ну а вот если событие «изменение базы» проходит тайно от нас, остается в цикле раз в минуту делать опрос (чаще не нужно, Вы же храните события с минутной точностью) и, если список в БД поменялся на фоне прошлого раза, опрашиваем at, и дальше по приведенному плану. Менее изящно, но вполне работоспособно.