The start of a
multicols environment is a valid page breakpoint. If you like to have material in front of the environment attached to the environment you need to place it into the first optional argument which is provided for this purpose. However, that may not be enough if that material is large because then
multicols may start only to find that there is not enough space left to actually generate columns.
The solution to that is to request to
multicols to start only if there is a minimal amount of space left on the page and otherwise generate a page break. This minimal amount needs to include the amount taken up by the first optional argument. So a solution to your problem would be something like
which (assuming your heading and separation takes roughly 3 lines) means you have at least 4 lines in the multicol columns. You may need an even larger value here given that your column material contains large displays near the beginning.
multicol.pdf documentation for details.