### 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
self.sshpass_pipe = os.pipe()
                        cmd[1] = b'-d' + to_bytes(self.sshpass_pipe[0], nonstring='simplerepr', errors='surrogate_or_strict')
                    display.vvv(u"RETRYING BECAUSE OF CONTROLPERSIST BROKEN PIPE")
                    return_tuple = func(self, *args, **kwargs)
                remaining_retries = remaining_tries - attempt - 1
                _handle_error(remaining_retries, cmd[0], return_tuple, self._play_context.no_log, self.host)
                break
            
            except AnsibleAuthenticationFailure:
                
                raise
            except (AnsibleConnectionFailure, Exception) as e:
                if attempt == remaining_tries - 1:
                    raise
                else:
                    pause = 2 ** attempt - 1
                    if pause > 30:
                        pause = 30
                    if isinstance(e, AnsibleConnectionFailure):
                        msg = u"ssh_retry: attempt: %d, ssh return code is 255. cmd (%s), pausing for %d seconds" % (attempt + 1, cmd_summary, pause)
                    else:
                        msg = (u"ssh_retry: attempt: %d, caught exception(%s) from cmd (%s), "
                               u"pausing for %d seconds" % (attempt + 1, to_text(e), cmd_summary, pause))
                    display.vv(msg, host=self.host)
                    time.sleep(pause)
                    continue
        return return_tuple
    return wrapped
class Connection(ConnectionBase):