You don't need \LetLtxMacro in this case. Rather you should not redefine the environment with an argument: just pass it to the saved macro (unless you need to do something at the very start of the environment.
\documentclass{article}
\usepackage{multicol}
\usepackage{lipsum}
\let\FMmulticols\multicols
\let\endFMmulticols\endmulticols
\renewenvironment{multicols}
{<some stuff before>\FMmulticols}
{\endFMmulticols<some stuff after>}
\begin{document}
\begin{multicols}{2}[\section{A section title to show it works}]
\lipsum[1-2]
\end{multicols}
\end{document}

A different (and even more flexible) strategy is with etoolbox:
\documentclass{article}
\usepackage{multicol}
\usepackage{etoolbox}
\usepackage{lipsum}
\BeforeBeginEnvironment{multicols}{%
<some stuff before>%
}
\AfterEndEnvironment{multicols}{%
<some stuff after>%
}
\begin{document}
\begin{multicols}{2}[\section{A section title to show it works}]
\lipsum[1-2]
\end{multicols}
\end{document}
For implementation reasons, it is not really possible to define an environment in terms of multicols, because this one checks explicitly for \end{multicols}.
Here's a generic approach that can be combined with the \BeforeBeginEnvironment and \AfterEndEnvironment approach for adding stuff to the standard multicols.
\documentclass{article}
\usepackage{multicol,etoolbox}
\usepackage{lipsum}
% keep copies of the original to be on the safe side
\let\FMmulticols\multicols
\let\endFMmulticols\endmulticols
\makeatletter
\newcommand{\newmulticolsenvironment}[3]{%
\newenvironment{#1}{#2\FMmulticols}{}%
\toks@=\expandafter{\endFMmulticols#3}%
\expandafter\edef\csname end#1\endcsname{\the\toks@}%
\expandafter\patchcmd\csname end#1\endcsname
{\@checkend{multicols}}
{\@checkend{#1}}
{}{}%
}
\newmulticolsenvironment{mastermulticols}
{<some stuff before>}
{<some stuff after>}
\begin{document}
\begin{mastermulticols}{2}[\section{A section title to show it works}]
\lipsum[1-2]
\end{mastermulticols}
\end{document}
Addition for the *-version
With some stretch, we can also define the *-version for every environment we define with \newmulticolsenvironment:
\documentclass{article}
\usepackage{multicol,etoolbox}
\usepackage{lipsum}
% keep copies of the original to be on the safe side
\let\FMmulticols\multicols
\let\endFMmulticols\endmulticols
\letcs\FMmulticolsstar{multicols*}
\letcs\endFMmulticolsstar{endmulticols*}
\patchcmd{\FMmulticolsstar}{\begin{multicols}}{}{}{}
\patchcmd{\endFMmulticolsstar}{\end{multicols}}{}{}{}
\makeatletter
\newcommand{\newmulticolsenvironment}[3]{%
\newenvironment{#1}{#2\FMmulticols}{}%
\toks@=\expandafter{\endFMmulticols#3}%
\expandafter\edef\csname end#1\endcsname{\the\toks@}%
\expandafter\patchcmd\csname end#1\endcsname
{\@checkend{multicols}}
{\@checkend{#1}}
{}{}%
\newenvironment{#1*}
{#2\FMmulticolsstar\begin{#1}}
{\endFMmulticolsstar\end{#1}#3}%
}
\newmulticolsenvironment{mastermulticols}
{<some stuff before>}
{<some stuff after>}
\begin{document}
\begin{mastermulticols*}{2}[\section{A section title to show it works}]
\lipsum[1-4]
\end{mastermulticols*}
\end{document}
\oldmulticolsdoes not provide the old\endmulticolsautomatically – Jan 31 '17 at 15:24