Várias dessas já são vantagens por evitar más práticas.
A existência de parâmetros com nomes duplicados é algo que obviamente não deveria ocorrer, tanto que não é permitido no modo estrito.
O uso de "this" é algo que você deve evitar, pois torna o código mais imprevisível e menos legível. No exemplo mencionado no post, é melhor simplesmente fazer:
let person = {
name: "Ernane Ferreira",
sayMyName: () => console.log(My name is ${person.name}.)
};
person.sayMyName(); // => My name is Ernane Ferreira.
Outra diferença que não foi mencionada no post e deve ser evitada é o hoisting. Funções clássicas podem ser utilizadas antes de serem declaradas, o que pode parecer bom inicialmente, mas torna o código menos legível e mais imprevisível, uma vez que o JavaScript é uma linguagem scriptada que é executada de cima para baixo.
Outra diferença não mencionada que deve ser evitada é a sobrecarga de funções (function overloading). Funções clássicas podem ser sobrescritas simplesmente declarando uma nova função com o mesmo nome. Não é preciso dizer que isso também torna o código mais imprevisível e menos legível.
Quanto ao restante das diferenças, acredito que sejam insignificantes. Por fim, também acredito que usar apenas arrow functions torna o código mais coeso, uma vez que as arrow functions são algo que você inevitavelmente usará em callbacks eventualmente.