excluding current post from get_posts

You overwrite the value of $post when you output the first set of posts, so it’s no longer the same post object as your single post.

You can either wp_reset_postdata() after each loop (which you should do after the last one anyway), or assign $post->ID to some other var before the loop, and reference that instead so it doesn’t get overwritten.