Finalmente eu percebi. O problema não era com a codificação. Foi com a estrutura dos documentos.
Porque eu fui no exemplo padrão do MongoPipeline, que não lida com itens fragmentados aninhados.
O que estou fazendo é:BlogItem:"url"...comments =[CommentItem]
Então meu BlogItem tem uma lista de CommentItems. Agora veio o problema aqui, para persistir o objeto no banco de dados eu faço:
self.db[self.collection_name].insert(dict(item))
Então aqui estou analisando o BlogItem para um dict. Mas eu não estou analisando a lista de CommentItems. E como o traceback exibe o CommentItem como um dict, não me ocorreu que o objeto problemático não é um dict!
Então, finalmente, a maneira de corrigir esse problema é alterar a linha ao anexar o comentário à lista de comentários como tal:
item['comments'].append(dict(comment))
Agora o MongoDB o considera como um documento válido.
Por fim, para a última parte em que pergunto por que estou recebendo uma exceção no console python e não no script.
A razão é porque eu estava trabalhando no console python, que suporta apenas ascii. E assim o erro.