The problem is that multicols
first adds the balanced columns and then a vertical skip of \multicolsep
which generates a breakpoint after the columns. While this is normally what is wanted as this means the space vanishes in the page break if it is taken, it means that any code after ending the environment comes too late and thus can end up on the next page if the columns end at or very near the end of the page.
Thereofore we disable
%\AfterEndEnvironment{multicols}{\endsecornament}
and proceed in a different way
To enlarge the page if this is the situation we need to hook into the multicols
code to test for this before the skip is inserted.
%------ interface -----
\usepackage{etoolbox}
\patchcmd\endmulticols
{{multicols}\endgroup}
{{multicols}\endgroup\mcenlargepage}
{\typeout{Success!}}
{\typeout{Patch failed!}\ERROR}
The code added at this point could then test for the available space and do the right thing depending on the situation:
%----- code ------------
%
% #1 = min space needed
% #2 = material to be inserted before \vspace{\multicolsep}
% but with \nointerlineskip (arguable)
\newdimen \mctempdim
\def\mcenlargepagecode#1#2{%
\mctempdim \dimexpr \pagegoal-\pagetotal+\pageshrink \relax
\ifdim \mctempdim < \dimexpr #1\relax
\PackageWarning{multicol}%
{Space remaining on page:
\the\mctempdim \space < \the\dimexpr #1\relax
\MessageBreak
Enlarging page by \the\dimexpr #1-\mctempdim\relax}%
\enlargethispage{\dimexpr #1-\mctempdim\relax}%
\fi
\nointerlineskip
#2%
}
One could do the parametrisation setting up a number of registers but for now I used a simple way, i.e., you have to define \mcenlargepage
to use \mcenlargepagecode
above according to your needs:
%--- parametrization ----------
\setbox0\hbox{\endsecornament}
\def\mcenlargepage{\mcenlargepagecode{\ht0+\dp0+12pt}%
{\vspace{12pt}%
\endsecornament}}
And I guess that's it. For testing purposes I also increased the \textheight
by 5pt and with that we get

and the warning:
Package multicol Warning: Space remaining on page: 5.0pt < 23.31198pt
(multicol) Enlarging page by 18.31198pt on input line 70.
If we disable the patch we get

and if we end the multicols in the middle of the page we get

Thus, except for possibly some hidden snags this seems to do what is requested.
Addendum
The multicol
package is free software distributed under LPPL. And so is this code of course. However, for historical reasons the multicol
license has an extended "moral obligation clause" that asks for considering to pay a license fee of your own choosing if it is used for commercial applications such as producing a book to be sold.
The historical background of this rather curious moral obligation is described in the paper Reflections on the history of the LaTeX Project Public License (LPPL) - A software license for LaTeX and more
which can be found on the LaTeX project site and in the TUGboat archives.
That main part of the paper describes how the LaTeX Project License (LPPL) evolved and gives some history about the license "wars" that happened way back so I think it is worth a read in its own right.