É uma questão de otimização do consumo de memória e otimização da comparação de cadeias. Toda vez que você estiver usando uma sequência vazia no seu aplicativo, estará alocando um objeto de sequência contendo 0 caracteres. Quanto à comparação de strings, isso pode ser feito comparando referências (ponteiros) em vez de caractere por caractere, o que é mais rápido, mesmo para as strings vazias.
Se você estiver usando muitas vezes a mesma string em seu aplicativo, poderá usar o mesmo tipo de mecanismo chamando String.Intern () com sua string. Mas se você estiver usando cada sequência apenas uma vez, usará apenas mais memória.
Portanto, o String.Empty é apenas uma otimização de caso especial que vale a pena fazer para a maioria dos aplicativos .Net, por isso foi integrada ao BCL.
Para mais detalhes sobre este assunto, recomendo fortemente a leitura do post de Eric Lippert no blog .
Você também deve dar uma olhada nesta documentação referenciada por seu post no blog.