### 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
left_only_changed = copy_left_only(b_src, b_dest, module)
                    common_dirs_changed = copy_common_dirs(b_src, b_dest, module)
                    owner_group_changed = chown_recursive(b_dest, module)
                    if diff_files_changed or left_only_changed or common_dirs_changed or owner_group_changed:
                        changed = True
            if not src.endswith(os.path.sep) and not os.path.exists(module.params['dest']):
                b_basename = to_bytes(os.path.basename(module.params['src']), errors='surrogate_or_strict')
                b_dest = to_bytes(os.path.join(b_dest, b_basename), errors='surrogate_or_strict')
                if not module.check_mode and not os.path.exists(b_dest):
                    os.makedirs(b_dest)
                    changed = True
                    b_src = to_bytes(os.path.join(module.params['src'], ""), errors='surrogate_or_strict')
                    diff_files_changed = copy_diff_files(b_src, b_dest, module)
                    left_only_changed = copy_left_only(b_src, b_dest, module)
                    common_dirs_changed = copy_common_dirs(b_src, b_dest, module)
                    owner_group_changed = chown_recursive(b_dest, module)
                if module.check_mode and not os.path.exists(b_dest):
                    changed = True
    res_args = dict(
        dest=dest, src=src, md5sum=md5sum_src, checksum=checksum_src, changed=changed
    )
    if backup_file:
        res_args['backup_file'] = backup_file
    if not module.check_mode:
        file_args = module.load_file_common_arguments(module.params, path=dest)
        res_args['changed'] = module.set_fs_attributes_if_different(file_args, res_args['changed'])
    module.exit_json(**res_args)
if __name__ == '__main__':
    main()