Steps to reproduce:
1) Change the #weights of elements on a built-in Drupal form to reorder form elements. The registration form is a good choice.
2) Submit the form with errors in every validated field.
3) Notice that the order the validation messages appear in does not match the order of the fields on the form.
I've prepared a patch that solves this issue by sorting child elements before doing any validating in _form_validate(). Patch is built against Drupal 5.1.