This is because tikz-cd
uses double
for that, which draws a white line on top. Here is a simple way to fix this, even with a free bonus. ;-)
\documentclass{article}
\usepackage{tikz-cd}
\usetikzlibrary{decorations.markings}
\tikzset{double line with arrow/.style args={#1,#2}{decorate,decoration={markings,%
mark=at position 0 with {\coordinate (ta-base-1) at (0,1pt);
\coordinate (ta-base-2) at (0,-1pt);},
mark=at position 1 with {\draw[#1] (ta-base-1) -- (0,1pt);
\draw[#2] (ta-base-2) -- (0,-1pt);
}}}}
\begin{document}
Original:
\[
\begin{tikzcd}
X \ar[equal]{r} & Y \ar[mapsfrom]{r} & Z
\end{tikzcd}
\]
Fixed:
\[
\begin{tikzcd}
X \ar[-,double line with arrow={-,-}]{r} & Y \ar[mapsfrom]{r} & Z
\end{tikzcd}
\]
Bonus:
\[
\begin{tikzcd}
X \ar[-,double line with arrow={latex-,-latex}]{r} & Y \ar[mapsfrom]{r} & Z
\end{tikzcd}
\]
\end{document}