Потому что хендлер
@form_router.message(Form.name)
async def process_name(message: Message, state: FSMContext):
срабатывает дважды.
При старте бота устанавливается стэйт Form.name, бот запрашивает имя - отправляем имя, срабатывает хендлер:
@form_router.message(Form.name)
async def process_name(message: Message, state: FSMContext):
await state.update_data(name=message.text)
await message.answer('Выберите кнопку ниже', reply_markup=ReplyKeyboardMarkup(keyboard=[[KeyboardButton(text='Купить'),KeyboardButton(text='Продать'),]],resize_keyboard=True,))
if message.text == 'Продать':
await state.set_state(Form.kolvo)
await message.answer('Введи количество')
Но, из-за того, что имя будет "Продать" блок if, где происходит смена стэйта не срабатывает, и стэйт остается Form.name, соответственно и при отправке следующего сообщения боту сработает тот е самый хендлер, который ожидает имя, пока не придет слово Продать. И только в этом случае стэйт переключится и будет срабатывать следующий хэндлер