I know that with a model that is not identifiable the data can be said to be generated by multiple different assignments to the model parameters. I know that sometimes it's possible to constrain parameters so that all are identifiable, as in the example in Cassella & Berger 2nd ed, section 11.2.

Given a particular model, how can I evaluate whether or not it's identifiable?

For identifiability we are talking about a parameter $\theta$ (which could be a vector), which ranges over a parameter space $\Theta$, and a family of distributions (for simplicity, think PDFs) indexed by $\theta$ which we typically write something like $\{ f_{\theta}|\, \theta \in \Theta\}$.  For instance, $\theta$ could be $\theta = \beta$ and $f$ could be

$$
f_{\theta}(x) = \frac{1}{\beta}\mathrm{e}^{-x/\beta}, \ x>0,\ \beta >0,
$$
which would mean that $\Theta = (0,\infty)$.  In order for the model to be identifiable, the transformation which maps $\theta$ to $f_{\theta}$ should be one-to-one.  Given a model in your lap, the most straightforward way to check this is to start with the equation $f_{\theta_{1}} = f_{\theta_{2}}$, (this equality should hold for (almost) all $x$ in the support) and to try to use algebra (or some other argument) to show that just such an equation implies that, in fact, $\theta_{1} = \theta_{2}$.

If you succeed with this plan, then your model is identifiable; go on with your business.  If you don't, then either your model isn't identifiable, or you need to find another argument.  The intuition is the same, regardless: in an identifiable model it is impossible for two distinct parameters (which could be vectors) to give rise to the same likelihood function.

This makes sense, because if, for fixed data, two unique parameters gave rise to the same likelihood, then it would be impossible to distinguish between the two candidate parameters based on the data alone.  It would be impossible to identify the true parameter, in that case.

For the example above, the equation $f_{\theta_{1}} = f_{\theta_{2}}$ is
$$
\frac{1}{\beta_{1}}\mathrm{e}^{-x/\beta_{1}} = \frac{1}{\beta_{2}}\mathrm{e}^{-x/\beta_{2}},
$$
for (almost) all $x > 0$. If we take logs of both sides we get
$$
-\ln\,\beta_{1} - \frac{x}{\beta_{1}} = -\ln\,\beta_{2} - \frac{x}{\beta_{2}}
$$
for $x > 0$, which implies the linear function
$$
-\left(\frac{1}{\beta_{1}} - \frac{1}{\beta_{2}}\right)x - (\ln\,\beta_{1} - \ln\,\beta_{2})
$$
is (almost) identically zero.  The only line which does such a thing is the one which has slope 0 and y-intercept zero.  Hopefully you can see the rest.

By the way, if you can tell by looking at your model that it isn't identifiable (sometimes you can), then it is common to introduce additional constraints on it to make it identifiable (as you mentioned).  This is akin to recognizing that the function $f(y) = y^{2}$ isn't one-to-one for $y$ in $[-1,1]$, but it is one-to-one if we restrict $y$ to lie inside $[0,1]$.  In more complicated models the equations are tougher but the idea is the same.
