Replace featured image when shortcode is present

I think you have to pass post ID parameter in the get_field() if you get data using loop.
so pass the in the get_field(). because currently it is trying to get data from current page field.

Try this if it works :

if( get_field( 'video_link', get_the_id() ) ) 
{
     get_field( 'video_link', get_the_id() ); 

} 
else 
{
    if( has_post_thumbnail( get_the_ID() 
    {
        get_the_image( array( 'size' => 'portfolio-thumb', 'width' => 600, 'height' => 400, 'before' => '<div class="post-thumb">', 'after' => '</div>' ) );
    }
}

So full loop content will be below:

<li id="post-<?php the_ID(); ?>" <?php post_class( $additional_classes ); ?> >
        <?php if( get_field( 'video_link',get_the_ID() ) ) {
            get_field( 'video_link',get_the_ID() );   
        } else {
            if( has_post_thumbnail( get_the_ID())) {
                get_the_image( array( 'size' => 'portfolio-thumb', 'width' => 600, 'height' => 400, 'before' => '<div class="post-thumb">', 'after' => '</div>' ) ); 
             }
        }
        ?>
<h3><a href="https://wordpress.stackexchange.com/questions/340689/<?php the_permalink(); ?>" title="<?php printf( esc_attr__( 'Permalink to %s', 'wp' ), the_title_attribute( 'echo=0' ) ); ?>" rel="bookmark"><?php the_title(); ?></a></h3>
</li>

let me know if it works.

Thank you!