This happens because siunitx uses the TS1 encoding for some symbols. Somewhere in siunitx.sty you have:
\AtBeginDocument {
\cs_if_free:cT { T@TS1 }
{
\DeclareFontEncoding { TS1 } { } { }
\DeclareFontSubstitution { TS1 } { cmr } { m } { n }
}
}
and this loads the ts1enc.dfu file which contains:
\DeclareUnicodeCharacter{2190}{\textleftarrow}
which redefines the arrow, as you diagnosed.
In fact, without siunitx, the utf8 macro for ← is:
\u8:← ->\IeC {\leftarrow }
and with siunitx is is changed to:
\u8:← ->\IeC {\textleftarrow }
A hackish way of preventing siunitx from loading ts1enc.dfu is by tricking the \cs_if_free:cT with something like:
\def\T@TS1{\NothingUseful}
but right before posting the above as an answer, I found this another answer by Joseph Wright saying that if you load textcomp, siunitx will no longer load ts1enc.dfu, so you have:
% !TEX encoding = UTF-8 Unicode
% !TEX TS-program = pdflatex
\documentclass{article}
\usepackage{textcomp}
\usepackage{siunitx}
\usepackage[utf8]{inputenc}
\DeclareUnicodeCharacter{2190}\leftarrow % ←
\begin{document}
$←$
\end{document}
SIunitsdefines←as well; just it does not overwrite myDeclareUnicodeCharacter. – Symbol 1 Sep 27 '18 at 23:16