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}