### 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
#
#
#
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import cmd
import functools
import os
import pprint
import queue
import sys
import threading
import time
from collections import deque
from multiprocessing import Lock
from jinja2.exceptions import UndefinedError
from ansible import constants as C
from ansible import context