Sizes are correct because TikZ/PGF uses \paperwidth and \paperheight for page dimensions, which memoir correctly sets without bleed. Origin however isn't calculated at all, a {0pt}{0pt} is hardcoded in pgfmoduleshapes, where current page is created. You may redefine that, but I suggest creating a new bounding box called memoir page, which will cut the trim but also take odd and even pages into account. The code is below and works for me in pdflatex and xelatex with one catch - the command has to be repeated twice (hardly anything extraordinary for LaTeX).
\documentclass[showtrims,svgnames]{memoir}
\usepackage{lipsum}
\settrimmedsize{210mm}{148mm}{*}
\setstocksize{236mm}{164mm}
\settrims{5mm}{5mm}
\setulmarginsandblock{20mm}{22mm}{*}
\setlrmarginsandblock{20mm}{30mm}{*}
\checkandfixthelayout
\trimLmarks
\usepackage{tikz}
% this is the added code. Use \calculatetrims when you change page geometry
% You also have to use "memoir page" instead of "current page" in tikz
\usepackage{calc}
\makeatletter
\newlength\memoirleftodd \newlength\memoirrightodd
\newlength\memoirlefteven \newlength\memoirrighteven
\newlength\memoirtop \newlength\memoirbottom
\def\calculatetrims{
\setlength\memoirbottom{\stockheight-\paperheight-\trimtop}
\setlength\memoirleftodd{\stockwidth-\paperwidth-\trimedge}
\setlength\memoirlefteven{\trimedge}
\setlength\memoirtop{\memoirbottom+\paperheight}
\setlength\memoirrightodd{\memoirleftodd+\paperwidth}
\setlength\memoirrighteven{\memoirlefteven+\paperwidth}}
\expandafter\def\csname pgf@sh@ns@memoir page\endcsname{rectangle}
\expandafter\def\csname pgf@sh@np@memoir page\endcsname{%
\def\southwest{\checkoddpage\pgfqpoint{
\ifoddpage\memoirleftodd\else\memoirlefteven\fi}{\memoirbottom}}%
\def\northeast{\checkoddpage\pgfqpoint{
\ifoddpage\memoirrightodd\else\memoirrighteven\fi}{\memoirtop}}}
\expandafter\def\csname pgf@sh@nt@memoir page\endcsname{{1}{0}{0}{1}{0pt}{0pt}}
\expandafter\def\csname pgf@sh@pi@memoir page\endcsname{pgfpageorigin}
% (Brent's additional code goes here)
\makeatother
\begin{document}
\calculatetrims % You must write this before first overlay picture
\begin{tikzpicture}[remember picture, overlay, line width=3pt]
\draw[red] (memoir page.south west) rectangle (memoir page.north east);
\end{tikzpicture}
\lipsum[1-4]
\begin{tikzpicture}[remember picture, overlay, line width=3pt]
\draw[red] (memoir page.south west) rectangle (memoir page.north east);
\end{tikzpicture}
\end{document}
If anyone needs to do this with regard to the stock, here's a suggestion, which can be substituted for the above code, or added at the point shown:
\expandafter\def\csname pgf@sh@ns@memoir stock\endcsname{rectangle}
\expandafter\def\csname pgf@sh@np@memoir stock\endcsname{%
\def\southwest{\pgfqpoint{0pt}{0pt}}%
\def\northeast{\pgfqpoint{\stockwidth}{\stockheight}}%
}
\expandafter\def\csname pgf@sh@nt@memoir stock\endcsname{{1}{0}{0}{1}{0pt}{0pt}}
\expandafter\def\csname pgf@sh@pi@memoir stock\endcsname{pgfpageorigin}
(Don't forget this needs to be inside a \makeatletter/\makeatother pair.)