### Summary

The option `jinja2_native=1` seems not well applied in template module.

### Issue Type

Bug Report

### Component Name

template

### Ansible Version

```console
$ ansible --version
ansible [core 2.11.6] 
  config file = /usr/local/src/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.9.9 (main, Nov 17 2021, 16:20:40) [GCC 10.2.1 20210110]
  jinja version = 3.0.3
  libyaml = True
```


### Configuration

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

# empty output
```


### OS / Environment

Debian 11.1 (Bullseye)

### Steps to Reproduce

Here my files:

```sh
root@flhpz4:/usr/local/src# ls -al
total 20
drwxr-xr-x 1 root root 4096 Nov 27 18:50 .
drwxr-xr-x 1 root root 4096 Nov 15 00:00 ..
-rw-r--r-- 1 root root  830 Nov 27 18:45 playbook-bug.yml
-rw-r--r-- 1 root root  234 Nov 27 18:39 template.j2
```

The `template.j2` file:

```
var_good is {% if var_good is not none %}NOT {% endif %}none, value=[{{ var_good }}], type={{ var_good | type_debug }}
var_bad is {% if var_bad is not none %}NOT {% endif %}none, value=[{{ var_bad }}], type={{ var_bad | type_debug }}
```

And my playbook:

```yaml
---
- name: "test produce a bug... It seems to me..."
  hosts: "localhost"
  connection: "local"
  gather_facts: false
  vars:
    d:
      x: null
    y: null
    var_good: "{{ y }}"
    var_bad: "{{ d.x }}"
    msg: |-
      var_good: type={{ var_good | type_debug }}, value=[{{ var_good }}]
      var_bad: type={{ var_bad | type_debug }}, value=[{{ var_bad }}]
  tasks:
    - ansible.builtin.debug:
        msg: "{{ msg.split('\n') }}"
    - name: "lookup without jinja2_native"
      ansible.builtin.debug:
        msg: "{{ lookup('template', 'template.j2') | trim | split('\n') }}"
    - name: "lookup with jinja2_native=yes"
      ansible.builtin.debug:
        msg: "{{ lookup('template', 'template.j2', jinja2_native='yes') | trim | split('\n') }}"
    - ansible.builtin.template:
        src: "template.j2"
        dest: "/tmp/template.yml"
```

Here is the command to produce the bug (according to me):

```sh
rm -f /tmp/template.yml && ANSIBLE_JINJA2_NATIVE=1 ansible-playbook --diff -i 'localhost,' playbook-bug.yml 
```


### Expected Results

To me, because `jinja2_native` is enabled, the tasks:

- `lookup without jinja2_native`
- and `lookup with jinja2_native=yes`

should evaluate `var_good` **and** `var_bad` to `none`, and not just `var_good`, no?

Currently, these tasks evaluate `var_good` to `none` (OK for me) and `var_bad` to the **string** `None`.

By the way, with `jinja2_native` **disabled** (ie `ANSIBLE_JINJA2_NATIVE=0`), these tasks evaluate `var_bad` to an **empty string**. So `jinja2_native=1` changes the behavior of template module, but not in the expected way to me.


### Actual Results

```console
PLAY [test produce a bug... It seems to me...] *************************************************

TASK [ansible.builtin.debug] *******************************************************************
ok: [localhost] => {
    "msg": [
        "var_good: type=NoneType, value=[None]",
        "var_bad: type=NoneType, value=[None]"
    ]
}

TASK [lookup without jinja2_native] ************************************************************
ok: [localhost] => {
    "msg": [
        "var_good is none, value=[None], type=NoneType",
        "var_bad is NOT none, value=[None], type=str"
    ]
}

TASK [lookup with jinja2_native=yes] ***********************************************************
ok: [localhost] => {
    "msg": [
        "var_good is none, value=[None], type=NoneType",
        "var_bad is none, value=[None], type=NoneType"
    ]
}

TASK [ansible.builtin.template] ****************************************************************
--- before
+++ after: /root/.ansible/tmp/ansible-local-19257luyp3lx/tmpt6d9t7gs/template.j2
@@ -0,0 +1,2 @@
+var_good is none, value=[None], type=NoneType
+var_bad is NOT none, value=[None], type=str

changed: [localhost]

PLAY RECAP *************************************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
```


### Code of Conduct

- [x] I agree to follow the Ansible Code of Conduct
'''
        Our helper function, which will also recursively check dict and
        list entries due to the fact that they may be repr'd and contain
        a key or value which contains jinja2 syntax and would otherwise
        lose the AnsibleUnsafe value.
        '''
        if isinstance(val, dict):
            for key in val.keys():
                if self._is_unsafe(val[key]):
                    return True
        elif isinstance(val, list):
            for item in val:
                if self._is_unsafe(item):
                    return True
        elif getattr(val, '__UNSAFE__', False) is True:
            return True
        return False
    def _update_unsafe(self, val):
        if val is not None and not self.unsafe and self._is_unsafe(val):
            self.unsafe = True
    def resolve(self, key):
        '''
        The intercepted resolve(), which uses the helper above to set the
        internal flag whenever an unsafe variable value is returned.
        '''
        val = super(AnsibleContext, self).resolve(key)
        self._update_unsafe(val)
        return val
    def resolve_or_missing(self, key):