Porque no método atualizar na CategoriaDao, não é necessário atribuir o merge a um atributo, e no método de remover precisa? Segue os códigos:
public void atualizar(Categoria categoria) {
this.em.merge(categoria);
}
public void remover(Categoria categoria) {
categoria = em.merge(categoria);
this.em.remove(categoria);
}