I asked a professor at my University.
Apparently train.error
represents the training error (that is, the MSE) after each tree is added. Thus the error I computed is equal to the training error of the last tree, so in my example:
mean((yhat.boost-Hitters$Salary)^2) == boost.hitters$train.error[1000]