When a p
(or m
) cell is started, \everypar
is not void, but it contains
\vrule\@height\ht\@arstrutbox\@width\z@\everypar{}
which is the code that provides the insertion of a strut at the beginning of the paragraph. With your code you're removing this.
\documentclass{article}
\usepackage{array}
\newcommand{\dohang}{\hangindent1em\hangafter1 }
\newcolumntype{R}{%
>{\everypar\expandafter{\the\everypar\dohang\everypar{\dohang}}\arraybackslash}%
m{3in}%
}
\usepackage[a4paper, total={7in, 9in}]{geometry}
\begin{document}
\begin{tabular}{|p{1.5in}|p{1.5in}|R|}\hline
first column & second column &
first line of third column \newline
This line is indented. \par
This one is not, but if it goes on and on and eventually wraps,
the next line is indented. \\\hline
etc. & etc. & etc. \\\hline
\end{tabular}
\end{document}

A different solution that avoids messing with \hangindent
, \hangafter
and \everypar
, using LaTeX lists. The output is the same.
\documentclass{article}
\usepackage{array}
\newcommand{\dohang}{\hangindent1em\hangafter1 }
\newcolumntype{R}{%
>{\tablist}%
m{3in}%
<{\endtablist}%
}
\newenvironment{tablist}
{\list{}{%
\leftmargin=1em
\itemindent=-1em
\listparindent=-1em
\topsep=0pt
\parsep=0pt
\partopsep=0pt}\item[\strut]}
{\endlist\vspace{-\baselineskip}}
\usepackage[a4paper, total={7in, 9in}]{geometry}
\begin{document}
\begin{tabular}{|p{1.5in}|p{1.5in}|R|}\hline
first column & second column &
first line of third column \newline
This line is indented. \par
This one is not, but if it goes on and on and eventually wraps,
the next line is indented. \\\hline
etc. & etc. & etc. \\\hline
\end{tabular}
\end{document}