Cron não é um shell - ele não analisa os comandos da mesma maneira que um shell. Assim, sua variável é atribuída como se fosse um texto estático.
Existem três soluções que conheço para este problema:
Opção 1: Use um script shell para gerar seu comando, inclua todas as variáveis e lógicas desejadas - e chame esse script de shell a partir do cron.
* * * * * /path/to/myscript.sh
myscript.sh:
DATEVAR='date +20\%y\%m\%d_\%H\%M\%S'
echo $DATEVAR >> /tmp/crontab.log
Opção 2: Inclua o comando date diretamente em seu comando e, como todo o comando é passado para o shell, a data será processada e substituída por uma data real.
* * * * * /bin/echo 'date +20\%y\%m\%d_\%H\%M\%S' >> /tmp/crontab.log
Opção 3: Defina a variável string no cron e passe-a ao seu comando para ser processada (note - os sinais de porcentagem não precisam ser escapados, e a própria variável é envolvida em $ () para executá-la em um shell separados - os backticks devem funcionar da mesma forma):
DATEVAR=date +20%y%m%d_%H%M%S
* * * * * /bin/echo $($DATEVAR) >> /tmp/crontab.log
(Em todos os casos acima, você pode, é claro, usar uma variável para o caminho do log, em vez de 'codificar').