Outputting an array of term meta values in a custom WooCommerce tab?

For your author content display, instead of print_r($all_term_meta); try a foreach:

foreach($all_term_meta as $meta) {
    return $meta[0];
}

It’s possible you may need to use “echo” instead of “return” but try “return” first.

To control whether or not there is an author tab, update your woo_new_product_tab function with the same condition:

function woo_new_product_tab( $tabs ) {
    $terms = get_the_terms(get_the_ID(), 'book-author' );
    if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
        // Adds the new tab
        $tabs['author_tab'] = array(
            'title'     => __( 'About the author', 'woocommerce' ),
            'priority'  => 50,
            'callback'  => 'woo_new_product_tab_content'
        );
    }
    return $tabs;
}