In which cases should hook_process() and hook_process_HOOK() be used? Considering that some modules implement hook_process() to alter the content of some variables and replace their content with themed content, in which cases should a module implement hook_process() instead of hook_preprocess() (or hook_preprocess_HOOK())?

function rdf_process(&amp;$variables, $hook) {
  // Handles attributes needed for content not covered by title, content,
  // and field items. It does this by adjusting the variable sent to the
  // template so that the template doesn't have to worry about it. See
  // theme_rdf_template_variable_wrapper().
  if (!empty($variables['rdf_template_variable_attributes_array'])) {
    foreach ($variables['rdf_template_variable_attributes_array'] as $variable_name =&gt; $attributes) {
      $context = array(
        'hook' =&gt; $hook, 
        'variable_name' =&gt; $variable_name, 
        'variables' =&gt; $variables,
      );
      $variables[$variable_name] = theme('rdf_template_variable_wrapper', array('content' =&gt; $variables[$variable_name], 'attributes' =&gt; $attributes, 'context' =&gt; $context));
    }
  }
  // Handles additional attributes about a template entity that for RDF parsing
  // reasons, can't be placed into that template's $attributes variable. This
  // is "meta" information that is related to particular content, so render it
  // close to that content.
  if (!empty($variables['rdf_metadata_attributes_array'])) {
    if (!isset($variables['content']['#prefix'])) {
      $variables['content']['#prefix'] = '';
    }
    $variables['content']['#prefix'] = theme('rdf_metadata', array('metadata' =&gt; $variables['rdf_metadata_attributes_array'])) . $variables['content']['#prefix'];
  }
}
I'll try to stay away from explaining the whole theme system. The order and use of the functions is best explained here.

Preprocessor functions run before process functions. You should run hook process for cases where you want to affect every theme call after all the preprocessors have run. (Well, I believe it is only every theme call with a .tpl file.)

RDF is a good example as it wants to insert meta data into every theme template. But in most cases it is not something you would want to do. Another example would be something like the Pirate module.

Preprocessors are more targeted. If you only want to change lists for example you could use a preprocess hook there. I believe that hook_preprocess_HOOK()s are run for templates and functions.

hook_preprocess() can be used in a theme if you wish to preprocess something which is not overridden in your theme, as the theme_preprocess_HOOK() won't trigger unless you do.