### Summary

When:
force_handlers=true
inlude_tasks is in loop and the included tasks contain "notify" handler 
ansible=2.14

then after execution gets completed, the error is raised:
ERROR! BUG: There seems to be a mismatch between tasks in PlayIterator and HostStates
instead of displaying PLAY RECAP

### Issue Type

Bug Report

### Component Name

!needs_collection_redirect strategy plugin linear.py

### Ansible Version

```console
$ ansible --version
ansible [core 2.14.1]
  config file = None
  configured module search path = ['/home/devel/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/devel/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.2 (main, Feb 22 2022, 10:03:04) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44.0.3)] (/usr/local/bin/python3)
  jinja version = 3.0.3
  libyaml = True
```


### Configuration

```console
# if using a version older than ansible-core 2.12 you should omit the '-t all'
$ ansible-config dump --only-changed -t all
CONFIG_FILE() = None
```


### OS / Environment

Oracle Linux 7.9

### Steps to Reproduce
```console
$ find . | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/"
.
 |-bug.yml
 |-bug
 | |-handlers
 | | |-main.yml
 | |-tasks
 | | |-main.yml
 | | |-handler_3.yml
 | | |-connect_server.yml

$ cat bug.yml
---
- name: bug
  hosts: "all"
  gather_facts: false
  force_handlers: true
  become: false

  tasks:
    - include_role:
        name: bug

$ cat bug/tasks/main.yml
---
- name: add tasks in loop
  include_tasks: connect_server.yml
  loop: "{{ my_hosts[1:] }}"
  when: inventory_hostname == my_hosts[0]

$ cat bug/tasks/connect_server.yml
---
- name: command 3
  ansible.builtin.command: /bin/true
  notify: handler_3

$ cat bug/handlers/main.yml
---
- name: handler_3
  include_tasks: handler_3.yml
  loop: "{{ my_hosts[1:] }}"

$ cat bug/tasks/handler_3.yml
---
- name: Handler 3
  ansible.builtin.debug:
    msg: "Handler for {{ item }}"
```

### Expected Results
```console
# after updating bug.yml to force_handlers: false the expected result is achieved
$ ansible-playbook -u ansible --extra-vars '{"my_hosts":["server1", "server2"]}' -i server1,server2 bug.yml

PLAY [bug] *****************************************************************************************************************************************************

TASK [include_role : bug] **************************************************************************************************************************************

TASK [bug : add tasks in loop] *********************************************************************************************************************************
skipping: [server2] => (item=server2)
skipping: [server2]
included: /home/devel/test/bug/tasks/connect_server.yml for server1 => (item=server2)

TASK [bug : command 3] *****************************************************************************************************************************************
changed: [server1]

RUNNING HANDLER [bug : handler_3] ******************************************************************************************************************************
included: /home/devel/test/bug/tasks/handler_3.yml for server1 => (item=server2)

RUNNING HANDLER [bug : Handler 3] ******************************************************************************************************************************
ok: [server1] => {
    "msg": "Handler for server2"
}

PLAY RECAP *****************************************************************************************************************************************************
server1               : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
server2               : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0
```

### Actual Results

```console
$ ansible-playbook -u ansible --extra-vars '{"my_hosts":["server1", "server2"]}' -i server1,server2 bug.yml

PLAY [bug] *****************************************************************************************************************************************************

TASK [include_role : bug] **************************************************************************************************************************************

TASK [bug : add tasks in loop] *********************************************************************************************************************************
skipping: [server2] => (item=server2)
skipping: [server2]
included: /home/devel/test/bug/tasks/connect_server.yml for server1 => (item=server2)

TASK [bug : command 3] *****************************************************************************************************************************************
changed: [server1]

RUNNING HANDLER [bug : handler_3] ******************************************************************************************************************************
included: /home/devel/test/bug/tasks/handler_3.yml for server1 => (item=server2)

RUNNING HANDLER [bug : Handler 3] ******************************************************************************************************************************
ok: [server1] => {
    "msg": "Handler for server2"
}
ERROR! BUG: There seems to be a mismatch between tasks in PlayIterator and HostStates.
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
display.debug("here goes the callback...")
                            if isinstance(task, Handler):
                                self._tqm.send_callback('v2_playbook_on_handler_task_start', task)
                            else:
                                self._tqm.send_callback('v2_playbook_on_task_start', task, is_conditional=False)
                            task.name = saved_name
                            callback_sent = True
                            display.debug("sending task start callback")
                        self._blocked_hosts[host.get_name()] = True
                        self._queue_task(host, task, task_vars, play_context)
                        del task_vars
                    
                    if run_once:
                        break
                    results.extend(self._process_pending_results(iterator, max_passes=max(1, int(len(self._tqm._workers) * 0.1))))
                
                if skip_rest:
                    continue
                display.debug("done queuing things up, now waiting for results queue to drain")
                if self._pending_results > 0:
                    results.extend(self._wait_on_pending_results(iterator))
                self.update_active_connections(results)
                included_files = IncludedFile.process_include_results(
                    results,
                    iterator=iterator,
                    loader=self._loader,
                    variable_manager=self._variable_manager
                )
                if len(included_files) > 0:
                    display.debug("we have included files to process")