### 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
'''
        Reads the connection property for the host, and returns the
        correct connection object from the list of connection plugins
        '''
        
        if cvars.get('ansible_connection') is not None:
            self._play_context.connection = templar.template(cvars['ansible_connection'])
        else:
            self._play_context.connection = self._task.connection
        
        
        
        connection_name = self._play_context.connection
        
        conn_type = connection_name
        connection, plugin_load_context = self._shared_loader_obj.connection_loader.get_with_context(
            conn_type,
            self._play_context,
            self._new_stdin,
            task_uuid=self._task._uuid,
            ansible_playbook_pid=to_text(os.getppid())
        )
        if not connection:
            raise AnsibleError("the connection plugin '%s' was not found" % conn_type)
        
        if cvars.get('ansible_become') is not None:
            become = boolean(templar.template(cvars['ansible_become']))
        else:
            become = self._task.become
        if become: