Ну событие (сообщение) попадает в обработчик только когда удовлетворяет условию state. По умолчанию оно отсутствует (а не любое). При запуске у пользователя тоже не установлено значение. Потом когда пользователь делает какой-то шурум-бурум устанавливается state, как ты говоришь waiting_for_phone. А фильтр на конечный автомат (state у твоего обработчика), как я уже сказал отстуствует.
Тут надо уже указывать конкретный state ( waiting_for_phone например) или проще всего сбросить @dp.message_handler(commands=['start'], state='*')
Но тут попадет любое состояние которое удовлетворяет условию: command start