### Summary

I have an inventory with two hosts, say H1 an H2.
On H2, I execute a task with `delegate_to: H1`. It seems, however, that the task is eventually executed on H2.


### Issue Type

Bug Report

### Component Name

core

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.5] 
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/mrks/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.9/site-packages/ansible
  ansible collection location = /home/mrks/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.9.7 (default, Aug 31 2021, 13:28:12) [GCC 11.1.0]
  jinja version = 3.0.2
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
<none>
```


### OS / Environment

Arch Linux

### Steps to Reproduce

Playbook:
```yaml
- hosts: H2
  tasks:
  - shell: hostname
    register: foo
    delegate_to: H1
  - debug:
    var: foo
```


### Expected Results

Expected foo.stdout = 'H1'.

By the way, I am pretty sure that this worked for a long time.

### Actual Results

```console
TASK [shell] *******************************************************************
changed: [H2 -> H1]

TASK [debug] *******************************************************************
ok: [H2] => {
    "foo": {
...
        "stdout": "H2",
        "stdout_lines": [
            "H2"
        ]
    }
}
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
'''
        Runs the task with the loop items specified and collates the result
        into an array named 'results' which is inserted into the final result
        along with the item for which the loop ran.
        '''
        results = []
        
        
        
        task_vars = self._job_vars
        loop_var = 'item'
        index_var = None
        label = None
        loop_pause = 0
        extended = False