For both the situations you're considering, the vector spaces are different, and the joint state space is the tensor product of the individual vector spaces.
To describe operators on this space, we simply use the tensor product of operators: if $\hat{L}_z:\mathcal H_\mathrm{orb} \to \mathcal H_\mathrm{orb}$ and $\hat{S}_z:\mathcal H_\mathrm{spin} \to \mathcal H_\mathrm{spin}$, then their tensor product
$$
\hat{L}_z\otimes \hat{S}_z:\mathcal H_\mathrm{orb}\otimes \mathcal H_\mathrm{spin} \to \mathcal H_\mathrm{orb} \otimes \mathcal H_\mathrm{spin}
$$
is uniquely defined by its action on product states
$$
(\hat{L}_z\otimes \hat{S}_z)|\psi⟩\otimes |\phi⟩ = (\hat{L}_z|\psi⟩)\otimes (\hat{S}_z|\phi⟩)
$$
and by linearity.
On top of that structure, we often consider vector operations on the vector characters of those operators, including in particular their dot product
$$
\hat{\mathbf{L}} \stackrel{\otimes}{\cdot} \hat{\mathbf{S}}
=
\sum_{j=1}^3 \hat{L}_j\otimes \hat{S}_j.
$$
This is a legitimate dot product in that one can show that it does not depend on the basis with respect to which the components are taken, because each component transforms as a vector and so the usual proof techniques still apply.
Now, in practice, we normally drop the explicit tensor-product marks $\otimes$ unless we really need the clarity, because the structure is typically clear from the context (so that a product like $\hat{L}_z\hat{S}_z$ is generally unambiguous) and the explicit marks add notational bulk and therefore make everything harder to read. Thus, what you'll typically see is notation of the form
$$
\hat{\mathbf{L}} \cdot \hat{\mathbf{S}}
=
\sum_{j=1}^3 \hat{L}_j \hat{S}_j.
$$
in which the tensor products between operators that act on different sectors of the state space are implicit.