Where to render? Preprocess or template?
Drupal isn't consisting in this matter either I guess... In the default node.tpl.php variables are rendered while in other default templates (like html.php.php), variables are just printed.


That's not quite right. If you look at template_preprocess_html() you can see that nothing is run through render()/drupal_render(). So quite simply the variables in html.tpl.php are printed rather than rendered because they don't need to be rendered. All the vars are already strings, and no render arrays were used to build the template.

Conversely, the node content in node.tpl.php is a render array. So any parts of it that need to be rendered have to be run through render() and not just printed.

I would be tempted to follow core's example of using render() in templates, not in preprocess functions, unless you have a specific reason to do it differently.

From a performance point of view the difference would surely be negligible, but profiling the code in the context of your site and hardware is the only way to be certain.