Custom Post Type Meta Box Text Input Field Won’t Save When Blank

The problematic line is this one:

if (isset($_POST["book_title"]) && $_POST["book_title"] <> '') update_post_meta($post->ID, "book_title", $_POST["book_title"]);

That logic says: If the submitted form contains a field called ‘book_title’ and if the content of the ‘book_title’ field does not equal an empty string, then save it. In your situation, the first condition should be met (HTML input fields with a ‘text’ type will appear in the $_POST global even when they’re empty), but the second one is failing. Change it to:

if ( isset( $_POST["book_title"] ) ) 
    update_post_meta($post->ID, "book_title", $_POST["book_title"]);