### 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
setup_task.args = {}
        
        if not self._play.tags:
            setup_task.tags = ['always']
        
        for option in ('gather_subset', 'gather_timeout', 'fact_path'):
            value = getattr(self._play, option, None)
            if value is not None:
                setup_task.args[option] = value
        setup_task.set_loader(self._play._loader)
        
        if self._play._included_conditional is not None:
            setup_task.when = self._play._included_conditional[:]
        setup_block.block = [setup_task]
        setup_block = setup_block.filter_tagged_tasks(all_vars)
        self._blocks.append(setup_block)
        
        
        self.all_tasks = setup_block.get_tasks()
        for block in self._play.compile():
            new_block = block.filter_tagged_tasks(all_vars)
            if new_block.has_tasks():
                self._blocks.append(new_block)
                self.all_tasks.extend(new_block.get_tasks())
        
        
        
        
        
        self.handlers = [h for b in self._play.handlers for h in b.block]