Das Problem ist, dass Du in zweifacher Weise gegen die Regeln für `\AtBeginDocument` verstoßen hast. Zum einen heißt es in »[LaTeX2e for class and package writers](http://mirrors.ctan.org/macros/latex/doc/clsguide.pdf)« schon seit Ende 1996 explizit:
> However, note that code in the `\AtBeginDocument` hook is part of the preamble. Thus there are restrictions on what can be put there; in particular, no typesetting can be done.
und
> The `\AtBeginDocument` hook should not be used for code that does any typesetting since the typeset result would be unpredictable.
Auf Deutsch sagt beides, dass man `\AtBeginDocument` keinesfalls dazu verwenden sollte, Code auszuführen, der bereits Satzaufgaben ausführt. Dazu gehören nicht nur unmittelbare Ausgaben, sondern eben auch der Anfangscode von Umgebungen, die bereits Formatierungen für den nachfolgenden Text durchführen.
Zum anderen ist es ein (mehr oder weniger) ungeschriebenes Gesetz, dass man niemals das gesamte Dokument per `\AtBeginDocument` und `\AtEndDocument` in eine Gruppe packen sollte. `\begin{document}` und `\end{document}` sind bewusst keine normale Umgebungen, die eine Gruppe implizieren, sondern verhindern explizit, dass sie eine Gruppe bilden. Zerbricht man das, kann alles mögliche schief gehen.
Behebt man in deinem Beispiel wenigst das letzte Problem:
\begin{filecontents}{meine-oberklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meine-oberklasse}
\LoadClass{article}
\RequirePackage{scrlayer-scrpage}
\AtBeginDocument{\textbf{Anfangstext der Oberklasse}\par}
\BeforeClosingMainAux{\addtocounter{page}{-1}\label{LastPage}}
\cfoot{Seite \pagemark{} von \pageref{LastPage}}
\end{filecontents}
\begin{filecontents}{meine-unterklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meine-unterklasse}
\LoadClass{meine-oberklasse}
\AtBeginDocument{Es folgt eine Aufzählung.\itemize}
\AtEndDocument{\enditemize Die Aufzählung ist beendet.}
\end{filecontents}
\documentclass{meine-unterklasse}
\usepackage{blindtext}
\begin{document}
\item \blindtext
\end{document}
so funktioniert das Beispiel zwar, es ist aber noch immer ein Verstoß gegen die explizit dokumentierte Verwendung von `\AtBeginDocument`. *Ich würde also unbedingt davon abraten, das so zu machen.*
Übrigens stellt das Paket `etoolbox` einen Befehl `\AfterEndPreamble` bereit, der Code bereits als Teil des Dokumentkörpers ausführt. Allerdings ist auch damit nicht ratsam eine Gruppe zu beginnen, die man erst bei `\AtEndDocument` beendet. Auch das geht schief. Auch hier kommt das Ende der Gruppe schlicht zu spät. Auch hier wird ein Teil des Codes von `\end{document}` noch innerhalb der Gruppe von `\begin{itemize}…\end{itemize}` ausgeführt, was unbedingt zu vermeiden ist.
Was dagegen funktionieren würde ist:
würde:
\begin{filecontents}{meine-oberklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meine-oberklasse}
\LoadClass{article}
\RequirePackage{scrlayer-scrpage}
\RequirePackage{etoolbox}
\AfterEndPreamble{\textbf{Anfangstext der Oberklasse}\par}
\BeforeClosingMainAux{\addtocounter{page}{-1}\label{LastPage}}
\cfoot{Seite \pagemark{} von \pageref{LastPage}}
\end{filecontents}
\begin{filecontents}{meine-unterklasse.cls}
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{meine-unterklasse}
\LoadClass{meine-oberklasse}
\AfterEndPreamble{Es folgt eine Aufzählung.\begin{itemize}}
\pretocmd{\enddocument}{\end{itemize}Die Aufzählung ist beendet.}{}{}
\end{filecontents}
\documentclass{meine-unterklasse}
\usepackage{blindtext}
\begin{document}
\item \blindtext
\end{document}
Hier wird die `itemize`-Umgebung beendet, noch bevor irgendwelcher Code von `\end{document}` ausgeführt wird. Aber auch hier betrachte ich es als durchaus nicht ideal, dass das gesamte Dokument in einer Gruppe steckt.steckt. Außerdem kann auch das schief gehen, wenn jemand anderer auf dieselbe Idee kommt und ebenfalls Code durch `\pretocmd{\enddocument}{…}{…}{…}` ausführen lässt. Das kommt dann sehr auf den jeweiligen Code an.