### 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
for attr in ('__module__', '__name__', '__qualname__', '__doc__', '__annotations__'):
        try:
            value = getattr(func, attr)
        except AttributeError:
            pass
        else:
            setattr(wrapper, attr, value)
    for attr in ('__dict__',):
        getattr(wrapper, attr).update(getattr(func, attr, {}))
    wrapper.__wrapped__ = func
    return wrapper
def _wrap_native_text(func):
    """Wrapper function, that intercepts the result of a filter
    and wraps it into NativeJinjaText which is then used
    in ``ansible_native_concat`` to indicate that it is a text
    which should not be passed into ``literal_eval``.
    """
    def wrapper(*args, **kwargs):
        ret = func(*args, **kwargs)
        return NativeJinjaText(ret)
    return _update_wrapper(wrapper, func)
class AnsibleUndefined(StrictUndefined):
    '''
    A custom Undefined class, which returns further Undefined objects on access,
    rather than throwing an exception.
    '''
    def __getattr__(self, name):