add_action and remove_action if custom field exists

I’m not clear on how your code works as-is, as I mentioned in my comment. It looks like you’re adding an action to call a function inside the function that you want to call with that action. If nothing outside the function invokes it, it never runs.

add_action( 'template_redirect', 'check_breadcrumb_condition' );

function check_breadcrumb_condition(){
    global $post;
    $crumb = get_post_meta($post->ID, 'custom_breadcrumb', true); 
    if ($crumb) {
        remove_action( 'genesis_before_loop', 'genesis_do_breadcrumbs' );
        add_action( 'genesis_before_loop', 'customfield_breadcrumbs' );
    }
}

function customfield_breadcrumbs() {
    global $post;
    echo '<div class="breadcrumb">';
    echo get_post_meta($post->ID, 'custom_breadcrumb', true);
    echo '</div>';
}