While you are definitely not using a standard \section, with no MWE I had to make do (your mileage may vary). Without special treatment, anything over 38\baselineskip will force a page break.
The main problem is that multicols adds extra space before and after. One way to remove these spaces it to put it into a minipage, which absorbs spaces at the top and bottom.
\documentclass[letterpaper]{article}
\usepackage{multicol}
\usepackage{showframe}
\begin{document}
\noindent\rule{\textwidth}{39\baselineskip}
\section{Section}\everypar{}% disable @afterheading
\hrule
\noindent\begin{minipage}{\textwidth}
\begin{multicols}{4}
\begin{itemize}
\item a
\item b
\item c
\item d
\end{itemize}
\end{multicols}\end{minipage}
\hrule
\end{document}
\enlargethispage{5em}or a more suitable length. – Peter Wilson Mar 19 '22 at 17:24