### Summary

I have a strange behavior of `rescued` stat after run. I expected it to be equal 1 since there was a rescue block execution but instead it has value of 0. 
This is caused by block-with-always role inside block with rescue.

Is this expected behavior? How can I make sure if rescue block was actually executed in this scenario, if I'm only able to get an error?

### Issue Type

Bug Report

### Component Name

block

### Ansible Version

```console
ansible [core 2.13.0]
```


### Configuration

```console
All defaults
```


### OS / Environment

Arch Linux.

### Steps to Reproduce

Here's my main playbook:
```
---
- name: Ansible Blocks
  hosts: localhost
  gather_facts: false

  tasks:
    - name: kek
      block:
        - name: Run Main Role
          import_role:
            name: mainerrrole

      rescue:
        - name: Rescue block (perform recovery)
          debug:
            msg: "Something went wrong, cleaning up.."
```

Here's the `mainerrrole` code
```
- name: Deploy
  block:
    - name: ERR ROLE Failing intentionally by role
      command: "ls -l /tmp/does-not-exist"

  always:
    - name: Cleanup
      import_role:
        name: okrole
```

Here's the `okrole` code
```
- name: OK ROLE List home directory content
  command: "ls -l ~/"
```

### Expected Results

Expected run stats to contain rescued=1 since there was a rescue block execution in logs.

### Actual Results

```console
ansible-playbook play.yml 
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
 _______________________ 
< PLAY [Ansible Blocks] >
 ----------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

 _____________________________________________________________ 
< TASK [mainerrrole : ERR ROLE Failing intentionally by role] >
 ------------------------------------------------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["ls", "-l", "/tmp/does-not-exist"], "delta": "0:00:00.005622", "end": "2022-06-13 14:44:50.711257", "msg": "non-zero return code", "rc": 2, "start": "2022-06-13 14:44:50.705635", "stderr": "ls: cannot access '/tmp/does-not-exist': No such file or directory", "stderr_lines": ["ls: cannot access '/tmp/does-not-exist': No such file or directory"], "stdout": "", "stdout_lines": []}
 _____________________________________________________ 
< TASK [okrole : OK ROLE List home directory content] >
 ----------------------------------------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

changed: [localhost]
 ________________________________________ 
< TASK [Rescue block (perform recovery)] >
 ---------------------------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

ok: [localhost] => {
    "msg": "Something went wrong, cleaning up.."
}
 ____________ 
< PLAY RECAP >
 ------------ 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

localhost                  : ok=2    changed=1    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
    This is the base class for strategy plugins, which contains some common
    code useful to all strategies like running handlers, cleanup actions, etc.
    '''
    
    
    
    ALLOW_BASE_THROTTLING = True
    def __init__(self, tqm):