Qual é a vantagem em usar o CDI no Java em vez de fazer a dependência chamando classes estáticas como o EntityManager, por exemplo?

Essa parte não ficou muito clara pra mim.

Se não tem a necessidade, não tem vantagem.

O nome da técnica onde você recebe todas as dependências de um método/classe por parâmetro ao invés de buscá-las você mesmo (usando new ou acessando métodos estáticos/singletons) é Inversão de Controle.

A principal vantagem é testabilidade. Fica muito mais fácil escrever testes de unidade e passar objetos fake/mocks para esses componentes. Além disso, o sistema fica menos rígido.

Agora, como o @javaflex falou, as vezes fazer isso é muito overkill. Não adianta querer ficar aplicando técnicas de design sem critério algum, senão o projeto não vai sair do lugar, nunca estará perfeito. Você precisa fazer testes de unidade com esses componentes? Você vai ficar mudando o comportamento da classe com base nessas dependências (e.g. trocar o banco de dados durante o runtime)?

Tem casos e casos.