Olá, Luis! Tudo bem?
Gostaria de pedir desculpas pela demora em responder o seu tópico!
No padrão MVC, o Model é responsável por gerenciar os dados da aplicação. Quando utilizamos um ORM (Object-Relational Mapping), como o Doctrine, para fazer a persistência desses dados no banco, é comum utilizarmos uma classe que representa uma entidade do banco de dados, e essa classe geralmente possui um atributo que representa a chave primária da tabela, que é o caso do atributo "id".
O método setId serve justamente para "setar" esse atributo, ou seja, definir o valor da chave primária da entidade. Quando utilizamos o Doctrine, o setId não altera diretamente o valor do id no banco de dados, mas sim define o valor da chave primária da entidade, que será utilizada posteriormente pelo ORM para fazer a persistência dos dados no banco.
Quanto à sua pergunta sobre o Doctrine checar o Id no banco e fazer o merge daquele Id sem alterá-lo, você está correto. O Doctrine utiliza o Id da entidade para fazer a busca no banco de dados e, caso encontre um registro com esse Id, ele faz o merge dos dados da entidade com os dados do registro no banco, sem alterar o valor da chave primária.
Espero ter ajudado e bons estudos :)