<!--- Verify first that your issue is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY
In some cases of nesting `block`s/`import_tasks`' the `fail` module interrupts the Ansible execution and disregards `always` blocks.

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
block import_tasks

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.15
  config file = <...hidden...>/ansible.cfg
  configured module search path = [u'/home/XXX/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /home/XXX/venv/lib/python2.7/site-packages/ansible
  executable location = /home/XXX/venv/bin/ansible
  python version = 2.7.18rc1 (default, Apr  7 2020, 12:05:55) [GCC 9.3.0]
```

##### CONFIGURATION
<!--- Paste verbatim output from "ansible-config dump --only-changed" between quotes -->
```paste below
ANSIBLE_NOCOWS(<...hidden...>/ansible.cfg) = True
ANY_ERRORS_FATAL(<...hidden...>/ansible.cfg) = True
```

##### STEPS TO REPRODUCE
<!--- Describe exactly how to reproduce the problem, using a minimal test-case -->

<!--- Paste example playbooks or commands between quotes below -->
Create a following file structure:

File: play.yml
```yaml
- hosts: all
  gather_facts: no
  tasks:
  - block:
    - import_tasks: tasks.yml
    always:
      #- debug: msg="First"
      - block:
        - debug: msg="Second"
```
File: tasks.yml
```yaml
- fail: msg="Fail as expected"
```

<!--- HINT: You can paste gist.github.com links for larger files -->

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
First, failure message is printed.
Then, debug "Second" is printed.

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->
Failure message is printed.
Debug "second" is **not** printed.
<!--- Paste verbatim command output between quotes -->
```paste below
$ ansible-playbook -i localhost, -c local ../../play.yml 
PLAY [all] ********************************************************************************************************************************************************************************************************

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Fail as expected"}

NO MORE HOSTS LEFT ************************************************************************************************************************************************************************************************

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

```
##### ADDITIONAL INFORMATION
It seems to appear only if `block` is a first element in `always` dictionary. For example in such case:
 File: play.yml
```yaml
- hosts: all
  gather_facts: no
  tasks:
  - block:
    - import_tasks: tasks.yml
    always:
      - debug: msg="First"
      - block:
        - debug: msg="Second"
```
File: tasks.yml
```yaml
- fail: msg="Fail as expected"
```
Everything works as expected and both outer debug and inner debug get's printed:
```
$ ansible-playbook -i localhost, -c local ../../play.yml 
PLAY [all] ********************************************************************************************************************************************************************************************************

TASK [fail] *******************************************************************************************************************************************************************************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Fail as expected"}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "First"
}

TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "Second"
}

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

results.extend(self._execute_meta(task, play_context, iterator, host))
                        if task.args.get('_raw_params', None) not in ('noop', 'reset_connection', 'end_host', 'role_complete', 'flush_handlers'):
                            run_once = True
                        if (task.any_errors_fatal or run_once) and not task.ignore_errors:
                            any_errors_fatal = True
                    else:
                        
                        if self._step and choose_step:
                            if self._take_step(task):
                                choose_step = False
                            else:
                                skip_rest = True
                                break
                        run_once = templar.template(task.run_once) or action and getattr(action, 'BYPASS_HOST_LOOP', False)
                        if (task.any_errors_fatal or run_once) and not task.ignore_errors:
                            any_errors_fatal = True
                        if not callback_sent:
                            display.debug("sending task start callback, copying the task so we can template it temporarily")
                            saved_name = task.name
                            display.debug("done copying, going to template now")
                            try:
                                task.name = to_text(templar.template(task.name, fail_on_undefined=False), nonstring='empty')
                                display.debug("done templating")
                            except Exception:
                                
                                
                                display.debug("templating failed for some reason")
                            display.debug("here goes the callback...")