This is a bit of a guess, but you are running a secondary query inside the Loop (by way of the shortcode). That is going to alter some variables that subsequent code may depend upon, such as $post
.
I am thinking that you need to add wp_reset_query();
after your secondary Loop in the shortcode– right after the endwhile;