TeX selbst setzt Umlaute durch Voranstellen der Zeichen `\"`. Das Paket `babel` definiert sogenannte `shorthands`, welche dir bei Wahl der deutschen Sprache die Eingabe von Umlauten erleichtert. Somit führt `"o` zum gleichen Ergebnis wie `\"o" `\"o`.
`babel` aktiviert die `shorthands` ab `\begin{document}`, was aber für dein Makro zu spät ist. Hier ist bereits über die aktive Catcodetabelle die Kombination `"o"` `"o` gelesen worden.
Lösungsmöglichkeit
- Schiebe deine Defintion nach
`\begin{document}` (suboptimal)
- Arbeite mit `\"`
- aktiviere lokal das shorthand
Shorthand
hier ein Beispiel
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\begingroup
\shorthandon{"}
\gdef\cmdA{"o}
\endgroup
\newcommand\cmdB{"o}
\begin{document}
\newcommand\cmdC{"o}
"o\qquad \cmdA\qquad \cmdB\qquad \cmdC
\end{document}