### Summary

I use the `ansible.builtin.copy` module. Unfortunately, there is a combination of parameters where check mode prints `ok`, although when running in run mode, there is an actual change.

Unexpected malfunction is reproducible tested on `2.9.27`, `2.12.6` and `2.13.0`

### Issue Type

Bug Report

### Component Name

copy

### Ansible Version

```console
$ ansible --version
ansible 2.9.27
  config file = None
  configured module search path = ['/home/phoffmann/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/phoffmann/.local/share/virtualenvs/ansible-2.9-TCZdLugh/lib/python3.8/site-packages/ansible
  executable location = /home/phoffmann/.local/share/virtualenvs/ansible-2.9-TCZdLugh/bin/ansible
  python version = 3.8.12 (default, Apr  8 2022, 11:41:59) [GCC 9.4.0]

$ ansible --version
ansible [core 2.12.6]
  config file = None
  configured module search path = ['/home/phoffmann/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/phoffmann/.pyenv/versions/3.8.12/lib/python3.8/site-packages/ansible
  ansible collection location = /home/phoffmann/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/phoffmann/.pyenv/versions/3.8.12/bin/ansible
  python version = 3.8.12 (default, Apr  8 2022, 11:41:59) [GCC 9.4.0]
  jinja version = 3.1.2
  libyaml = True


$ ansible --version
ansible [core 2.13.0]
  config file = None
  configured module search path = ['/home/phoffmann/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/phoffmann/.local/share/virtualenvs/ansible-2.13-v8S06Uvz/lib/python3.8/site-packages/ansible
  ansible collection location = /home/phoffmann/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/phoffmann/.local/share/virtualenvs/ansible-2.13-v8S06Uvz/bin/ansible
  python version = 3.8.12 (default, Apr  8 2022, 11:41:59) [GCC 9.4.0]
  jinja version = 3.1.2
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed -t all
```


### OS / Environment

Ubuntu 20.04

### Steps to Reproduce

```yaml
---
- hosts: localhost
  tasks:
    - name: create file
      file:
        path: /tmp/ansible_foo
        state: touch
        owner: '{{ ansible_env.USER }}'
        group: '{{ ansible_env.USER }}'
        mode: 0600

    - name: Copy file with permissions
      copy:
        src: /tmp/ansible_foo
        dest: /tmp/ansible_foo2
        mode: 0644
        remote_src: yes

    - name: create file
      file:
        path: /tmp/ansible_foo2
        owner: '{{ ansible_env.USER }}'
        group: '{{ ansible_env.USER }}'
        mode: 0600
```


### Expected Results

I expect task `Copy file with permissions` to print `changed` 

Expected Result:
```
TASK [Copy file with permissions] ********************************************************************************************************************
--- before
+++ after
@@ -1,4 +1,4 @@
 {
-    "mode": "0600",
+    "mode": "0644",
     "path": "/tmp/ansible_foo2"
 }

```
It prints the expected `changed` as soon as `remote_src: yes` is removed.



### Actual Results

```console
TASK [Copy file with permissions] ********************************************************************************************************************
ok: [localhost]
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
import errno
import filecmp
import grp
import os
import os.path
import platform
import pwd
import shutil
import stat
import tempfile
import traceback
from ansible.module_utils._text import to_bytes, to_native
from ansible.module_utils.basic import AnsibleModule
from ansible.module_utils.common.process import get_bin_path
from ansible.module_utils.common.locale import get_best_parsable_locale
from ansible.module_utils.six import PY3
module = None
class AnsibleModuleError(Exception):
    def __init__(self, results):
        self.results = results
def clear_facls(path):
    setfacl = get_bin_path('setfacl')
    
    acl_command = [setfacl, '-b', path]
    b_acl_command = [to_bytes(x) for x in acl_command]
    locale = get_best_parsable_locale(module)
    rc, out, err = module.run_command(b_acl_command, environ_update=dict(LANG=locale, LC_ALL=locale, LC_MESSAGES=locale))
    if rc != 0:
        raise RuntimeError('Error running "{0}": stdout: "{1}"; stderr: "{2}"'.format(' '.join(b_acl_command), out, err))
def split_pre_existing_dir(dirname):