Olá, veja só como verifiquei seu código.
Primeiro, abrir o shell do Django:
python manage.py shell
Depois, importei Perfil
e joguei o perfil com ID 1 para uma variável. Imprimi o convite recebido:
>>> from perfis.models import Perfil
>>> perfil = Perfil.objects.get(id=1)
>>>for convite in perfil.convites_recebidos.all():
... convite.solicitante.nome
Ele imprime no console:
u'Oswaldo Alterado'
u'Oswaldo Alterado'
u'Oswaldo Alterado'
u'Oswaldo Alterado'
u'Oswaldo Alterado'
u'Fl\xe1vio Almeida'
Quando rodo sua aplicação, está corretamente sendo exibido os convites recebidos pelo usuário 1. Quando faço a mesma coisa, mas trocando pelo ID 2, olha só os solicitantes que aparecem:
u'Oswaldo Alterado'
u'Oswaldo Alterado'
u'Oswaldo Alterado'
Apenas três, e não seis.
Resumindo: comparando o que você gravou no banco com o resultado do que esta sendo exibido na tela, esta tudo perfeito.
Talvez, posso estar enganado, foi que na hora de você ter associado algo ao Perfil
2,você não tenha adicionado no Perfil 1, isso no capítulo 6.
Era isso? Aguardo seu feedback, estou curioso para saber se é isso mesmo.