Не могу конкретно по aiogram сказать, но ваши 2 кода различны. Не совсем понятно, что вы хотите сделать. Несколько предположений:
1. caption=post_data['text'] и caption='text' не эквивалентны. Первое - это значение по ключу 'text', а второе, видимо, сам ключ 'text' (вы не написали, что в словаре). Ошибка может быть из-за того, ему не нравится то, что по ключу 'text' в словаре.
2. Условие if post_data.get('text') выполнится сразу же, если в словаре в принципе есть ключ 'text' и только 1 раз (или ни разу, если 'text' не в словаре), потому что ключ 'text' будет заменен на None этой строкой post_data['text'] = None. Словарь теперь содержит {..., 'text': None}. Если вы хотите другое поведение, вам нужно другое условие.
3. Используйте key, value - так понятнее будет. Пример:
post_data = {'photo': 'some_photo', 'video': 'some_video', 'text': 'some_text'}
for key, value in post_data.items():
if post_data.get('text'):
album.add(type=key, media=value, caption=post_data['text'])
post_data['text'] = None
else:
album.add(type=key, media=value)