### Summary

I have created a role that has two tasks files: main and validation. The main task file uses block/rescue to validate the health of a system, with the rescue block trying to recover a failed system and then re-running the validation tasks. If the system still reports failure after an attempted recovery, I expect the failed host to be removed from `ansible_play_hosts` and `ansible_play_batch`; however they persist. Interestingly, the failed host(s) are excluded from future tasks in the play, and are excluded from subsequent plays in a playbook. I was only able to reproduce this if the rescue block had a failure from an `include_tasks`.


### Issue Type

Bug Report

### Component Name

rescue

### Ansible Version

```console
$ ansible --version

ansible [core 2.13.3]
  config file = None
  python version = 3.10.4 (main, Jun 29 2022, 12:14:53) [GCC 11.2.0]
  jinja version = 3.1.2
  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
```


### OS / Environment

ubuntu 22.04

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->

inventory:
```
[all]
a
b
```

roles/fail/tasks/validation.yml:
```yaml
- fail:
  when: "inventory_hostname == 'a'"
```

roles/fail/tasks/main.yml:
```yaml
- block:
    - include_tasks: "validation.yml"
  rescue:
    - debug:
        msg: "Failed for {{ inventory_hostname }}"
    - include_tasks: "validation.yml"
```

playbook:
```yaml
- hosts: "all"
  gather_facts: false
  tasks:
    - include_role:
        name: "fail"

    - debug:
        msg: "{{ item }} is: {{ lookup('vars', item) }}"
      loop:
        - "ansible_play_hosts_all"
        - "ansible_play_hosts"
        - "ansible_play_batch"

- hosts: "all"
  gather_facts: false
  tasks:
    - debug:
        msg: "second play for {{ inventory_hostname }}"
```


### Expected Results

I expected host a to be removed from ansible_play_hosts and ansible_play_batch

### Actual Results

```console
results:

PLAY [all] ***************************************************************************************************************************************************************************************************************************************************************************************************

TASK [include_role : fail] ***********************************************************************************************************************************************************************************************************************************************************************************

TASK [fail : include_tasks] **********************************************************************************************************************************************************************************************************************************************************************************
included: roles/fail/tasks/validation.yml for a, b

TASK [fail : fail] *******************************************************************************************************************************************************************************************************************************************************************************************
skipping: [b]
fatal: [a]: FAILED! => {"changed": false, "msg": "Failed as requested from task"}

TASK [fail : debug] ******************************************************************************************************************************************************************************************************************************************************************************************
ok: [a] => {
    "msg": "Failed for a"
}

TASK [fail : include_tasks] **********************************************************************************************************************************************************************************************************************************************************************************
included: roles/fail/tasks/validation.yml for a

TASK [fail : fail] *******************************************************************************************************************************************************************************************************************************************************************************************
fatal: [a]: FAILED! => {"changed": false, "msg": "Failed as requested from task"}

TASK [debug] *************************************************************************************************************************************************************************************************************************************************************************************************
ok: [b] => (item=ansible_play_hosts_all) => {
    "msg": "ansible_play_hosts_all is: ['a', 'b']"
}
ok: [b] => (item=ansible_play_hosts) => {
    "msg": "ansible_play_hosts is: ['a', 'b']"
}
ok: [b] => (item=ansible_play_batch) => {
    "msg": "ansible_play_batch is: ['a', 'b']"
}

PLAY [all] ***************************************************************************************************************************************************************************************************************************************************************************************************

TASK [debug] *************************************************************************************************************************************************************************************************************************************************************************************************
ok: [b] => {
    "msg": "second play for b"
}

PLAY RECAP ***************************************************************************************************************************************************************************************************************************************************************************************************
a                          : ok=3    changed=0    unreachable=0    failed=1    skipped=0    rescued=1    ignored=0   
b                          : ok=3    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
else:
                                            found = True
                                        if listening_handler.notify_host(original_host):
                                            self._tqm.send_callback('v2_playbook_on_notify', listening_handler, original_host)
                                
                                if not found:
                                    msg = ("The requested handler '%s' was not found in either the main handlers list nor in the listening "
                                           "handlers list" % handler_name)
                                    if C.ERROR_ON_MISSING_HANDLER:
                                        raise AnsibleError(msg)
                                    else:
                                        display.warning(msg)
                    if 'add_host' in result_item:
                        
                        new_host_info = result_item.get('add_host', dict())
                        self._inventory.add_dynamic_host(new_host_info, result_item)
                        
                        if result_item.get('changed') and new_host_info['host_name'] not in self._hosts_cache_all:
                            self._hosts_cache_all.append(new_host_info['host_name'])
                    elif 'add_group' in result_item:
                        
                        self._inventory.add_dynamic_group(original_host, result_item)
                    if 'add_host' in result_item or 'add_group' in result_item:
                        item_vars = _get_item_vars(result_item, original_task)
                        found_task_vars = self._queued_task_cache.get((original_host.name, task_result._task._uuid))['task_vars']
                        if item_vars:
                            all_task_vars = combine_vars(found_task_vars, item_vars)
                        else:
                            all_task_vars = found_task_vars
                        all_task_vars[original_task.register] = wrap_var(result_item)