Data won’t save on a straightforward metabox, what am I missing?

Instead of using the global $post variable, try just using the $post_id that was passed to the function in the first place.

update_post_meta($post_id "tf_book_number", $_POST["tf_book_number"]);
update_post_meta($post_id, "tf_book_reader", $_POST["tf_book_reader"]);