Dobre pytanie.
W zasadzie to nie wychodzi na to samo. Przeciążenia są zawsze wybierane w pierwszej kolejności, specjalizacje szablonu dopiero wtedy, kiedy bazowy szablon jest dopasowany. Może to prowadzić do zupełnie nieoczekiwanych zachowań - możesz o tym poczytać. Troszkę to stare, ale chyba nic się nie zmieniło w tej kwestii - Herb Sutter radzi tam używać przeciążeń, żeby zawsze wszystko działało tak jak chcemy.
Standard mówi, że nie można przeciążać funkcji z przestrzeni std::
, jeżeli to możliwe należy używać specjalizacji. Być może ta funkcjonalność została też dodana ze względu na kompletność - skoro można specjalizować szablony klas no to funkcji też (chociaż nie można specjalizować ich częściowo, a to prowadzi właśnie do sytuacji, kiedy użycie specjalizacji jest niemożliwe). Jeżeli w danym kodzie nie mogą pojawić się wspomniane wyżej problemy, to można też powiedzieć, że to kwestia stylu - specjalizuj szablony, a zwykłe funkcje przeciążaj.
Warto dodać, że specjalizacje szablonów funkcji mogą chyba przydać się w metaprogramowaniu.