Oi Breno, tudo certo?
Você tem rasão.
O método merge do entity manager retorna uma nova instância do objeto da entidade, ou seja, ele retorna uma nova referência para um outro objeto com os mesmos valores do objeto passado como argumento no método. Para descobrir isso, além de olhar na documentação como você fez, imprimi os dois objetos, tanto a entidade pessoa antes de fazer o merge, quanto a referência à nova pessoa retornada pelo merge.
Fiz isso sem sobreescrever o método toString, só para comparar os endereços de memória, e são diferentes. A pessoa transient, tem um endereço x, enquanto que a pessoa managed retornada pelo método merge, tem outro endereço de memória, por isso são referências diferentes, apontando para objetos diferentes.
Pelo menos foi assim que compreendi. Não sei se compreendi corretamente. Mas é isso aí.
E realmente, o id veio preenchido no objeto em estado managed retornado pelo método merge.
Agradeço pela contribuição.
Valeu mesmo.
Abraços!