Вы создаёте каждый раз новый тег, даже если если с таким названием существует
tags = Tag(name = i)
Соответственно он и привязывается к изображению.
1) Сделайте уникальное поле на имя тега (что бы они не плодились):
class Tag(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(5000), unique=True, nullable=True)
2) При добавлении тегов к изображению ищите сначала существующий:
...
tag = Tag.query.filter_by(name=i).first() # у вас tags почему-то, хотя это один тег
if not tag: # если в БД нет тега, то создаём
tag = Tag(name=i) # создаём новый тег, если его не нашлось в БД
save_db.tags.append(tag) # добавляем тег к изображению существующий или только что созданный
...
3) рекомендую отрефакторить имена переменных, сами себя запутываете)