Isso porque, quando você insere o comando na linha de comando, o shell executa "expansões" nele. A última etapa é "Remoção de cotações", mas apenas remove as cotações que não resultaram de nenhuma expansão. (Veja EXPANSÕES em man bash
para detalhes.) Aqui, as aspas fazem parte da expansão da variável, então elas não são removidas.
Você pode inserir a substituição sem aspas para que funcione:
cmd='sed -e s|abc|abc|g file'
$cmd