\equationrefname erwartet bei der Verwendung in hyperref kein Argument. Konkret wird es beispielsweise so verwendet:
\def\HyPsd@@autorefname#1.#2\@nil{%
\ltx@IfUndefined{#1autorefname}{%
\ltx@IfUndefined{#1name}{%
}{%
\csname#1name\endcsname\space
}%
}{%
\csname#1autorefname\endcsname\space
}%
}
Wenn Du es nun als Befehl mit Argument neu definierst, wird an der Stelle \space zum Argument. Es würde aber auch nichts nützen, wenn Du es jetzt einfach mit zwei Argumenten definierst, weil das dann wiederum nicht zur Verwendung von \HyPsd@@autorefname in \HyPdf@autorefname passt.
Erschwerend kommt hinzu, dass Deine Definition \begin{document} nicht überlebt, weil Du entweder babel oder die Zusammenarbeit von hyperref mit babel verstanden hast.
Die Frage ist also eigentlich eher: Wie kommst Du darauf, dass das funktionieren sollte? Es kann schlicht gar nicht funktionieren! Du solltest mit der Quelle der Informationen für diesen Code daher eher kritisch umgehen..
Nun könnte man natürlich mit Interna von hyperref rummurksen, bis es endlich klappt. Ich würde aber stattdessen analog zu \eqref ein \autoeqref definieren und am besten auch gleich \eqref selbst umdefinieren, so dass die Klammern ebenfalls Teil des Links werden:
\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{hyperref}
\makeatletter
\renewcommand*{\eqref}{%
\@ifstar {\@@eqref}{\@eqref}%
}
\newcommand*{\@@eqref}[1]{%
\textup{\tagform@{\ref*{#1}}}%
}
\newcommand*{\@eqref}[1]{%
\hyperref[#1]{\@@eqref{#1}}%
}
\newcommand*{\autoeqref}[1]{%
\hyperref[#1]{\equationautorefname\space\@@eqref{#1}}%
}
\makeatother
\begin{document}
\begin{align}
\label{eq:test}
a=b
\end{align}
\autoref{eq:test} vs. \autoeqref{eq:test} vs. \eqref{eq:test}
vs. \eqref*{eq:test} vs. \ref{eq:test} vs. \ref*{eq:test}.
\end{document}
vielleicht kannst Du Heiko ja überreden, dass er zumindest die Umdefinierung von \eqref direkt in hyperref einbaut. Wäre IMHO sinnvoll.