Here's a response from Jon, who's an expert in phylogenetics
In a parsimony tree it is precisely that -- the branch length is the minimum number of nucleotide or amino acid changes necessary to get between nodes on a given topology. The parsimony tree is chosen to minimize that total distance.
In a ML or Bayesian tree, the branch lengths are going to defined by some sort of model. So you might have the same number of nucleotide changes between A and B and between B and C, but if the changes on B to C have a lower likelihood in your model, that branch will be longer. Typically, in ML trees you will see the branches in units of evolutionary distance according to the model used (e.g. GTR or Tamura-Nei). A lot of Bayesian trees will incorporate an explicit rate parameter in the model, so the branch length will be in units of time. In the Bayesian trees you're actually fitting branch lengths rather than calculating them, so the branch length may not actually precisely reflect the modeled evolutionary distance -- and if it's a problematic branch that isn't being reconstructed with high posteriors, the difference can often be quite large.