Das Beispiel enthält gleich mehrere Fehler:
* Du definierst eine Tabelle mit 3 Spalte, verwendest aber in jeder Tabellenzeile 4 Spalten.
* Die Tabelle soll die Gesamtbreite `\textwidth` haben, in jeder Spalte wird aber eine `\multirow`-Anweisung mit einer Breite von `\textwidth` verwendet: 4 * `\textwidth` + 8 * `\tabcolsep` > `\textwidth`.
* In der zweiten Spalte der ersten Zeile fehlt eine schließende `}` am Ende.
Ende. Dadurch ist der gesamte Rest des Dokuments Teil des Arguments von `\multirow`, die Tabelle wird also nie beendet, was letztlich die Fehlermeldung verursacht.
* Das Längenargument von `\multirow` wurde nicht korrekt beendet, sondern mit dem Inhaltsargument vermischt.
Formal korrekt, aber noch immer nicht schön wäre:
\documentclass[preview,border=5pt]{standalone}
%\usepackage{multicol}% wird gar nicht verwendet
\usepackage{multirow}
\usepackage{tabularx}
%\usepackage{rotating}% wird gar nicht verwendet, würde graphicx bereits laden
\usepackage{graphicx}% array wird von tabularx geladen, multirow bereits oben
\begin{document}
\begin{tabularx}{\textwidth}{|*{4}{X|}}
\multirow{2}{*}{\textbf{\rotatebox{90}{1}}}
& \multirow{2}{*}{\textbf{\rotatebox{90}{2}}}
& \multirow{2}{*}{\textbf{\rotatebox{90}{3}}}
& \multirow{2}{*}{\textbf{\rotatebox{90}{Hallo}}}
\\
& & & \\ \hline
\end{tabularx}
\end{document}