A principal diferença é que os backticks não se encaixam: você não pode inserir um comando backticked dentro de outro. (Na verdade, você pode, mas você precisa escapar deles com uma barra invertida, e fica mais complicado a partir daí.) Essa foi, eu acredito, a principal motivação para criar a nova sintaxe $(command) .
A sintaxe $(command) também fornece um atalho conveniente para interpolar o conteúdo de um arquivo: $(<filename) é equivalente a $(cat filename) .
Outra diferença: $() não é suportado por alguns shells comuns.