Your code looks little clunky, http_build_query()
is definitely not meant for such. Also what you are fetching is not simple array, but array of tag objects.
My take:
$post_tags = wp_get_post_terms( $post_id, 'post_tag', array( 'fields'=>'names' ) );
$pos = array_search( 'tag-to-be-deleted', $post_tags );
if( false !== $pos ) {
unset( $post_tags[$pos] );
wp_set_post_terms ($post_id, $post_tags, 'post_tag');
}