Das Problem ist relativ trivial: Pakete sind normalerweise dafür ausgelegt *nach* der Klasse geladen zu werden. So erwartet auch `fontspec`, dass die Klasse bereits Basiseinstellungen und -definitionen wie die von `\normalsize` vorgenommen hat. Du lädst das Paket `fontspec` aber bereits *vor* der Klasse `scrartcl`, die diese Einstellungen für deine Wrapper-Klasse vornehmen soll. Also musst du schlicht das Laden der Klasse vorziehen.
Ich empfehle allerdings dringend, vor der Verwendung von `fontspec` innerhalb einer Klasse zu prüfen, ob auch wirklich XeTeX oder LuaTeX verwendet wird:
\begin{filecontents*}{meinexeklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meinexeklasse}
\ProcessOptions\relax
\LoadClass{scrartcl}
\RequirePackage{ifxetex,ifluatex}
\ifnum 0=\ifxetex 1\else\ifluatex 1\else 0\fi\fi\relax
\newcommand*{\zapf}[1]{{\fontfamily{qzc}\selectfont #1}}
\else
\RequirePackage{fontspec}
\newcommand*{\zapf}[1]{{\fontspec{texgyrechorus-mediumitalic.otf} #1}}
\fi
\end{filecontents*}
\documentclass{meinexeklasse}
\begin{document}
normaler Text
\zapf{Text in TeX Gyre Chorus}
\end{document}
Nebenbei bemerkt würde ich den Font – zumindest bei Verwendung von LuaLaTeX statt XeLaTeX oder bei
XeLaTeX wenn der Font als Systemfont verfügbar ist – eher über den Namen als über den Dateinamen laden und mit `\newfontfamily` eine eigene Familie für den Font definieren. Zu den Vorteilen sei auf die `fontspec`-Anleitung verwiesen.