Is this the right way to do this? Inserting a block into the content body field of a node
I am not one to say what is a/the best way, but if template_preprocess_WHATEVER() is, you set it up something like this:

function template_preprocess_WHATEVER(&amp;$vars) {
  if ( CONDITIONS YOU NEED IF ANY ) {
    $block = module_invoke('book', 'block_view');
    if ($block) {
      $book_block_view='&lt;div class="block-menu-navigation"&gt;';
      $book_block_view.=render($block);
      $book_block_view.='&lt;/div&gt;';
    }
    $vars['book_block_view']=$book_block_view;
  }
}


and now you would have $book_block_view available in WHATEVER to print or use.