Я бы делал в обсевере. Он создан для событий модели и это удобно поддерживать. А не клепать на 10 моделей 60 ивентов, 500 слушателей и потом разгребать провайдер. Тем более если логикой не предусмотрено что какой-то из слушателей может вернуть false и остановить выполнение ивента. В $dispatchesEvent тоже не стал бы убирать. Вообще непонятно зачем это придумали, когда есть обсервер. В модели имхо и так много всего, чтобы еще для себя евенты запускать.