в переменных Python ссылаются на объекты. поэтому, когда wordinfo находится вне цикла, на содержащиеся в нем значения ссылается ваш список значений.
Это означает, что на вашей последней итерации все значения в списке слов будут равны последнему значению, присвоенному wordinfo
так что в конце цикла у вас будет
wordlist = [wordinfo, wordinfo, wordinfo, wordinfo] # 100 times
если wordinfo eaual для {'usertag': True, 'word': 'because'}
, все элементы в списке будут иметь это значение.
Вы можете изменить этот код, чтобы он выглядел примерно так:
all_words=Word.objects.all()[0:100]
user=request.user
wordlist = []
for word in all_words:
taged_word = FlagWord.objects.filter(word = word,user = user)
usertag = False
if taged_word :
usertag = True
wordlist.append({'word': word, 'usertag': usertag)