You need to put the \label somewhere safer:

\documentclass{article}
\begin{document}
\hrule
\begin{tabular}{p{40mm}p{60mm}}\label{blah}
a & b \\
c & d
\end{tabular}
\hrule
\begin{tabular}{p{40mm}p{60mm}}
a\label{blah2} & b \\
c & d
\end{tabular}
\hrule
\begin{tabular}{p{40mm}p{60mm}}
a & b \\
c & d
\end{tabular}\label{blah3}
\hrule
\end{document}
A \label is not like \typeout that simply writes to the terminal it has to delay the writing to the aux file until the page number is known. The resulting write node is in many ways like a box of height and width 0pt and that is the effect that you see on the layout: the parbox (vtop) is aligning on the first node in its vertical list which is the invisible write node.
\labelto work, LaTeX has to be able to associate the argument of\labelwith a counter. The\captioncommand, when used inside atable(nottabular) environment, increments a counter calledtable. If you place\labelafter\caption, LaTeX will make the correct connection. In contrast, your particular use of\labelis guaranteed to achieve nothing useful -- and, in fact, mess things up in unexpected ways. Interestingly, if one embeds yourtabularenvironment (sans the\labeldirective) inside atableenvironment, the problem vanishes. – Mico Apr 22 '20 at 19:56\labelinstruction in a place where it doesn't belong. I guess viewpoints will diverge on whether or not the issue you've encountered is a bug. Knuth has memorably stated that he never intended TeX to be cracker-proof. If you insist on taking LaTeX in directions that were never intended to be taken -- congratulations. you may call yourself a certified LaTeX cracker. – Mico Apr 22 '20 at 20:45\color) and so long as you don't need\refit's Ok to use\labelhere. By design it does something more or less sensible even if no counter is active. – David Carlisle Apr 22 '20 at 23:20