Não estou conseguindo enxergar o pq do retorno ser "Teste 2", após o uso do clear() o produto não deveria ter passado para DETACHED, fazendo com que a única sincronização com o BD fosse o primeiro flush() do "Teste 1".
Em resumo pq o set do produto 2 funcionou após o clear e o teste 3 (que ao meu ver era o esperado) não.
Estou usando o PostgreSQL
Produto produto = em.find(Produto.class, 1);
produto.setDescricao("Teste 1");
em.flush();
em.clear();
produto.setDescricao("Teste 2");
em.merge(produto);
produto.setDescricao("Teste 3");
em.getTransaction().commit();
em.close();