Default header image does not display

You should register the default headers using register_defaults_headers – e.g.

register_default_headers( array(
    'default-image' => array(
        'url'           => get_stylesheet_directory_uri() . '/assets/img/default-header.jpg',
        'thumbnail_url' => get_stylesheet_directory_uri() . '/assets/img/default-header.jpg',
        'description'   => __( 'Default Header Image', 'textdomain' )
    ),
) );

See the codex entry for more info on the function – https://codex.wordpress.org/Function_Reference/register_default_headers.

The Codex isn’t clear, but this function is actually required for custom_headers to function correctly.