Actually, what you want to do is this:
function YOURTHEME_preprocess_page(&$variables) {
// This disables message-printing on ALL page displays
$variables['show_messages'] = FALSE;
}
function YOURTHEME_preprocess_node(&$variables) {
$variables['messages'] = theme('status_messages');
}
How this works:
Drupal core checks the value of show_messages in theme_process_page. If it is TRUE (default) then it calls theme('status_messages') as above, and effectively empties the messages storage, so calling the same theme function later will just return an empty string. However, if we set that variable to FALSE, this prevents said theme function from being called in process_page, allowing us to get all the messages using the same theme function, in a template of our choosing.
template_preprocess_node
so drupal_get_messages is empty when you call it.