Solução sem explicação
Eu não tenho 100% de certeza porque isso acontece, embora eu suspeite que tenha algo a ver com como ou quando o Bash está expandindo os argumentos para cp . No entanto, é fácil de corrigir: basta adicionar o sinalizador -a. Por exemplo:
rm -rf dir; cp -a dir2 dir
Isso funciona corretamente no meu sistema e não reporta erros. Como prova:
$ set -x; rm -rf dir; cp -a dir2 dir; ls
+ rm -rf dir
+ cp -a dir2 dir
dir dir2