diff --git a/ee/lib/gitlab_subscriptions/member_management/block_seat_overages.rb b/ee/lib/gitlab_subscriptions/member_management/block_seat_overages.rb
index ece5e49f7736153805821e54a1c4d88a5a3ea574..a69eab20cc914babb9996c5487479861a4d9a1cd 100644
--- a/ee/lib/gitlab_subscriptions/member_management/block_seat_overages.rb
+++ b/ee/lib/gitlab_subscriptions/member_management/block_seat_overages.rb
@@ -13,9 +13,11 @@ def block_seat_overages?(source)
 
         def seats_available_for?(source, invites, access_level, member_role_id)
           root_namespace = source.root_ancestor
-          return root_namespace.seats_available_for?(invites, access_level, member_role_id) if gitlab_com_subscription?
-
           parsed_invites = process_invites(source, invites)
+          if gitlab_com_subscription?
+            return root_namespace.seats_available_for?(parsed_invites, access_level, member_role_id)
+          end
+
           seats_available_for_self_managed?(parsed_invites, access_level, member_role_id)
         end
 
diff --git a/ee/spec/lib/gitlab_subscriptions/member_management/block_seat_overages_spec.rb b/ee/spec/lib/gitlab_subscriptions/member_management/block_seat_overages_spec.rb
index 1d78f6ee4e6b1f2c1c629cd55e147f47c38007db..260a7289fa53b9865fdb207f704ee8fa4fc0f831 100644
--- a/ee/spec/lib/gitlab_subscriptions/member_management/block_seat_overages_spec.rb
+++ b/ee/spec/lib/gitlab_subscriptions/member_management/block_seat_overages_spec.rb
@@ -55,7 +55,7 @@
 
     context 'when on GitLab.com', :saas do
       it 'delegates to root namespace' do
-        expect(group).to receive(:seats_available_for?).with(invites, access_level, member_role_id)
+        expect(group).to receive(:seats_available_for?).with(invites.map(&:to_s), access_level, member_role_id)
 
         seats_available?
       end
diff --git a/ee/spec/services/ee/members/create_service_spec.rb b/ee/spec/services/ee/members/create_service_spec.rb
index 4b47d5488590332e614601f73644ded42f795428..6a23b980773411fe2fc1313601f7323202e564f1 100644
--- a/ee/spec/services/ee/members/create_service_spec.rb
+++ b/ee/spec/services/ee/members/create_service_spec.rb
@@ -579,6 +579,31 @@
 
         execute_service
       end
+
+      context 'when email is of existing user' do
+        let(:invites) { project_users.map(&:email) }
+
+        it 'does not reject membership update for already billable user on billable role' do
+          project_member_a = project.add_developer(project_users.first)
+          project_member_b = project.add_developer(project_users.second)
+          params[:access_level] = ::Gitlab::Access::MAINTAINER
+
+          execute_service
+
+          expect(project_member_a.reload.access_level).to eq ::Gitlab::Access::MAINTAINER
+          expect(project_member_b.reload.access_level).to eq ::Gitlab::Access::MAINTAINER
+        end
+      end
+    end
+
+    context 'when we invite a bot user' do
+      let(:invites) { create(:user, :bot).id }
+
+      it 'does not reject bot users' do
+        params[:access_level] = ::Gitlab::Access::DEVELOPER
+
+        expect { execute_service }.to change { project.members.count }.by(1)
+      end
     end
 
     it 'adds guest users even if there are no seats available' do
diff --git a/ee/spec/services/ee/members/update_service_spec.rb b/ee/spec/services/ee/members/update_service_spec.rb
index 4aac07290ead75541f3076917419a754f6f3e5e0..ae301e64b6341a54f0bd1a9c8948f8353427cfdc 100644
--- a/ee/spec/services/ee/members/update_service_spec.rb
+++ b/ee/spec/services/ee/members/update_service_spec.rb
@@ -203,6 +203,17 @@
 
       expect(result[:status]).to eq(:success)
     end
+
+    it 'allows bot users updates' do
+      bot_member = group.add_developer(create(:user, :bot))
+
+      params = { access_level: ::Gitlab::Access::MAINTAINER, source: group }
+
+      result = described_class.new(user, params).execute(bot_member)
+
+      expect(result[:status]).to eq(:success)
+      expect(bot_member.reload.access_level).to eq(::Gitlab::Access::MAINTAINER)
+    end
   end
 
   context 'with block seat overages enabled for self-managed' do