Почему бы не Использовать эвенты? при изменении модели в событии updating проверяем "грязное" ли поле status (это покажет был ли это запрос на изменение статуса) если грязное то обрабатываем в соответствии с требованиями, если получаем неправильный ответ от обработки - устанавливаем нужный статус или тот который был в чистой модели.
Итог - или отработает так как надо или т̶а̶к̶ ̶к̶а̶к̶ ̶н̶а̶д̶о̶ возврат к нужному статусу.
1) Добавить кастомное правило валидации (Как это сделать есть в документации)
2) Получить разницу в годах между двумя датами через Carbon (В документации карбона)
3) Применить свое правило валидации
Я придерживаюсь правил:
1) Хранить в UTC
2) Передача данных Api и все что входит и выходит из компонента React(например) - ISO (2013-02-04T22:44:30.652Z)
Moment - toISOString()
Carbon - toIso8601ZuluString()
Зачем все эти 5к -10к, прошелся по файлу чанками по 1к (например), чанк перебрать через foreach и каждую запись в очередь. Там и времени и ресурсов для каждой записи предостаточно, мультипоточность и балансировка. А если база упадет или еще чего, все записи останутся в очереди и выполнятся как только смогут.