### Summary

If a var is defined in the `vars:` of a block, and then redefined again in the `vars:` of an inner block, the outer value is still used.

`vars:` on a _task_ in the inner block work as expected.

### Issue Type

Bug Report

### Component Name

unknown

### Ansible Version

```console
$ ansible --version
ansible [core 2.12.0.dev0] (devel 1fc1ab89ae) last updated 2021/07/17 12:29:56 (GMT -400)
  config file = None
  configured module search path = ['/home/briantist/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /home/briantist/code/ansible/ansible.core/lib/ansible
  ansible collection location = /home/briantist/.ansible/collections:/usr/share/ansible/collections
  executable location = /home/briantist/code/ansible/ansible.core/bin/ansible
  python version = 3.6.9 (default, Jan 26 2021, 15:33:00) [GCC 8.4.0]
  jinja version = 3.0.1
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed
CALLBACKS_ENABLED(env: ANSIBLE_CALLBACK_WHITELIST) = ['profile_tasks']
DEFAULT_FORKS(env: ANSIBLE_FORKS) = 30
INVENTORY_ENABLED(env: ANSIBLE_INVENTORY_ENABLED) = ['host_list', 'auto', 'ini', 'yaml', 'toml']
```


### OS / Environment

Ubuntu 18.04 on WSL2

### Steps to Reproduce

<!--- Paste example playbooks or commands between quotes below -->
```yaml
- name: outer
  vars:
    myvar: abc
  block:
    - debug:
        var: myvar

    - name: inner block
      vars:
        myvar: 123
      block:

        - debug:
            var: myvar

        - name: task
          vars:
            myvar: xyz
          debug:
            var: myvar
```

### Expected Results

inner block first `debug` result is `123`

### Actual Results

inner block first `debug` result is `abc`


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
new_task._parent = new_block
                    else:
                        
                        cur_obj = new_task._parent
                        while cur_obj._parent and cur_obj._parent != new_block:
                            cur_obj = cur_obj._parent
                        cur_obj._parent = new_block
                else:
                    new_task._parent = new_block
                new_task_list.append(new_task)
            return new_task_list
        new_me = super(Block, self).copy()
        new_me._play = self._play
        new_me._use_handlers = self._use_handlers
        if self._dep_chain is not None:
            new_me._dep_chain = self._dep_chain[:]
        new_me._parent = None
        if self._parent and not exclude_parent:
            new_me._parent = self._parent.copy(exclude_tasks=True)
        if not exclude_tasks:
            new_me.block = _dupe_task_list(self.block or [], new_me)
            new_me.rescue = _dupe_task_list(self.rescue or [], new_me)
            new_me.always = _dupe_task_list(self.always or [], new_me)
        new_me._role = None
        if self._role:
            new_me._role = self._role
        new_me.validate()
        return new_me
    def serialize(self):