Allow the node preprocess function to be called after setting the theme function in hook_node_view() In mymodule_node_view(), I set the theme function to be used with the following code.

$node-&gt;content['#theme'] = "my_custom_theme_function";


Now the node preprocess function (mymodule_preprocess_node()) is not called anymore.

How do I let Drupal run my node preprocess function, even if I set my theme function to be used?
With that line, you set the theme function for all the content shown for the node. Your code should be similar to the following one, taken from the documentation for hook_node_view().

function mymodule_node_view($node, $view_mode, $langcode) {
  $node-&gt;content['mymodule_field'] = array(
    '#markup' =&gt; $additional_field,
    '#weight' =&gt; 10,
    '#theme' =&gt; 'mymodule_custom',
  );
}


As to why your code is setting the theme function for all the node content, see the code executed by node_view(). (The comments are mine.)

  // This is the function that invokes hook_node_view().
  node_build_content($node, $view_mode, $langcode);

  $build = $node-&gt;content;

  // $node-&gt;content['#theme'], the value you set, becomes $build['#theme'].

  unset($node-&gt;content);

  // The following lines don't set anymore $build['#theme'], since you have already set it.
  // It is similar to executing the following code:
  //   $a = array('first' =&gt; "I am the first");
  //   $a += array('first' =&gt; "The array will never get this value");
  //
  // If you print the value of $a, you will see it is as it was first set.

  $build += array(
    '#theme' =&gt; 'node',
    '#node' =&gt; $node,
    '#view_mode' =&gt; $view_mode,
    '#language' =&gt; $langcode,
  );

  // Now the code is going to use your theme function, which means that not even
  // the node preprocess function is executed.


Normally, what you want to do is adding a new content to the render array for the node. That is what the code I show in the first snippet does.

If you really wanted to change the theme function used for the node, then you should simply implement hook_theme_registry_alter(), and redefine the function associated with the node theme function.

Keep in mind that once you change the used theme function, also the preprocess function changes; in your case, if theme_my_custom_theme_function() is your theme function, then the preprocess function is mymodule_preprocess_my_custom_theme_function().