Dein (falsch markierter) Code erzeugt bei mir mit aktuellen TeX Live eine Reihe von Fehlern beginnend mit:
Missing number, treated as zero.
<to be read again>
\let
l.16 \MyMark{1}
Dein Problem liegt aber eher nicht bei zref-savepos, sondern bei dessen Verwendung. Wenn nämlich \zsavepos und textblock verwendet werden, ist der von \blindtext erst in der Ausgaberoutine von LaTeX ggf. verursachte Seitenumbruch noch gar nicht erfolgt. Für TeX ist dein ganzes Dokument ja erst einmal ein einziger Absatz und der wird erst umbrochen, wenn er vollständig ist, bei dir also beim \end{document}. Und erst, nachdem der Absatz selbst umbrochen ist, erfolgt der Seitenumbruch. Zu dem Zeitpunkt sind die ganzen textblock-Umgebungen aber längst ausgeführt. Das sollte auch erklären, warum sich die Ausgabe ändert, wenn zusätzliche Absätze mit \par oder Leerzeilen eingefügt werden.
IMHO wäre das gewünschte mit \marginpar{…} (ggf. zusammen mit mparhack) oder mit scrlayer-notecolumn oder mit marginnote einfacher zu erreichen. Bei \marginpar ist zu beachten, dass es den Absatz nicht selbst beginnt, also am Absatzanfang ein \leavevmode voranzustellen wäre.
\documentclass{scrartcl}
\usepackage{blindtext}
\newcommand{\MyMark}[1]{%
\leavevmode
\reversemarginpar\marginpar{\Huge\textbf{#1}}%
\ignorespaces
}
\begin{document}
\MyMark{1}
\blindtext
\MyMark{2}
\blindtext
\MyMark{3}
\blindtext
\MyMark{4}
\blindtext
\MyMark{5}
\blindtext
\MyMark{6}
\blindtext
\MyMark{7}
\blindtext
\MyMark{8}
\blindtext
\end{document}
Achtung! Das \reversemarginpar wirkt sich ggf. auch auf andere \marginpar aus. Das Problem tritt beispielsweise mit scrlayer-notecolumn nicht auf. Dafür braucht das Paket mehrere LaTeX-Läufe, bis die Randnotizen am richtigen Platz stehen:
\documentclass{scrartcl}
\usepackage{blindtext}
\usepackage{scrlayer-notecolumn}
\DeclareNewNoteColumn[position=5mm,width=20mm,font=\Huge\bfseries]{MyMark}
\usepackage{showframe}
\newcommand{\MyMark}[1]{\makenote*[MyMark]{#1}}
\begin{document}
\MyMark{1}
\blindtext\marginpar{Hier steht eine normale Randnotiz}
\MyMark{2}
\blindtext
\MyMark{3}
\blindtext
\MyMark{4}
\blindtext
\MyMark{5}
\blindtext
\MyMark{6}
\blindtext
\MyMark{7}
\blindtext
\MyMark{8}
\blindtext
\end{document}
Achtung: Für das Paket marginnote gibt es keinen Support durch den Autor mehr. Das Paket scrlayer-notecolumn ist ein Proof-of-concept und hat daher auch nur einen eingeschränkten Support (siehe dazu die Anleitung).
Hinweis: Code in Beiträgen ist mit dem code-Tag zu markieren, der über den </>-Knopf in der Toolbar zu erreichen ist. der MWE-Tag erzeugt dagegen den Minimalbeispiel-Link. Siehe auch die BBCode-Kurzhilfe.