How do I hide the body field in a node using hide()?
You're rendering the wrong thing: you need to render $content:

hide($content['body']);
print render($content);


See core's implementation of node.tpl.php for more information.