Update 2020-01-14
The LaTeX kernel now makes \\ robust out-of-the-box. When used with the latest expl3 function \text_lowercase:n, this works with no additional adjustments. The comment in the original answer about strings versus text remains valid: you are case-changing text.
Original answer
The function \str_lowercase:n is for making strings lower case, and is for programmatic data not for text. You want \text_lowercase:n. The only issue is that \\ is not engine robust and the implementation of \text_lowercase:n expects 'text' to be either character tokens, things which expand to character tokens or engine-robust commands. We can solve that by locally making \\ engine-robust:
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand \LowerCase { m }
{
\group_begin:
\cs_set_protected:Npx \\ { \exp_not:o \\ }
\text_lowercase:n {#1}
\group_end:
}
\ExplSyntaxOff
\begin{document}
\LowerCase{This is my\\Text}
\end{document}
If you make \\ robust globally then everything stays expandable
\documentclass{article}
\usepackage{etoolbox}
\robustify\\
\usepackage{xparse}
\ExplSyntaxOn
\DeclareExpandableDocumentCommand \LowerCase { m }
{ \text_lowercase:n {#1} }
\ExplSyntaxOff
\begin{document}
\LowerCase{This is my\\Text}
\end{document}
Note that there is no need to store #1 in a token list variable in either case.
str_lower_caseis failing is because it converts everything inside to catcode letter – apparently the lccode of\is". I would've imagined\cs_new:Nn \__lower_it:n { \tl_map_inline:nn {#1} { \token_if_letter:NT {##1} {\tl_lower_case:n} {##1}}}would work, but it gets tripped up by\\all the same. (This is getting back into about where I stopped understanding TeX guts, so forgive any misconceptions that others will surely correct me on.) – Sean Allred Sep 01 '16 at 01:19\token_if_letter:NTby default. Did you generate a variant? And you are not passing\tl_lower_case:nthe argument it expects, I don't think. Also, I think this retains the\\(or would) but strips the spaces. Am I misunderstanding? – cfr Sep 01 '16 at 02:29tl_map_inlinehere – there are other points which ignore spaces (e.g.tl_head), but the docs are ambiguous for this one. It's possibletl_mapwon't work at all. (And yes, the way the expansion works out,tl_lower_caseis still getting its argument.) – Sean Allred Sep 01 '16 at 02:32\\at all? – Sep 01 '16 at 04:00\str_lower_case:ndoes only case change tokens, but it works on a string basis. Are you trying to make the text lower case, in which case simply use\tl_lower_case:n. (BTW, the reason you see““is that without loading the T1 encoding that's the glyph used in the\slot.) – Joseph Wright Sep 01 '16 at 06:21