Solution:
Apparently, when you use the multi-callback approach, Drupal does not refresh messages for you. You can do this manually, as follows:
// Remove the old messages div, clearing existing messages.
$commands[] = ajax_command_remove('#messages');
// Append a new messages div with our latest errors and messages.
$commands[] = ajax_command_after('#header-region', '<div id="messages">' . theme('status_messages') . '</div>');
Simply add this to any callback commands[] array you have, and you're good to go.
Thanks to Drupal.org -- AJAX commands and Drupal Messages for the right direction!