validation_epoch_end not logging validation_step EvalResult values
🐛 Bug
When overwriting validation_epoch_end the EvalResult values from validation_step are not logged.
For my experiments I keep track of several metrics that I only log to TensorBoard at the end of each validation epoch. For most metrics I can specify EvalResult().log(on_epoch=True), but one of the metrics I can only calculate at the end of the epoch. If I use validation_epoch_end to calculate this metric, the results from validation_step are not logged.
To Reproduce
    def validation_step(self, batch, batch_idx):
        x, y = batch
        y_hat = self(x)
        loss = F.cross_entropy(y_hat, y)

        result = pl.EvalResult(checkpoint_on=loss)
        result.log('val/loss', loss, on_step=False, on_epoch=True)
        result.log('val/y_hat', y_hat, logger=False, on_step=False, on_epoch=False)
        return result

    def validation_epoch_end(self, outputs):
        y_hat = outputs['val/y_hat']
        example = y_hat.exp().mean()

        result = pl.EvalResult()
        result.log('val/epoch_end_metric', example)
        return result

The code above writes 'val/epoch_end_metric' to TensorBoard, but does nothing with the result from validation_step.
As a result, the checkpoint metric specified in validation_step is also lost. Warnings are printed to screen, but it still prints a statement at the end of fit claiming to save the checkpoint (which is not happening).
...

  | Name | Type   | Params
--------------------------------
0 | l1   | Linear | 7 K   

Epoch 0:  50%|██████▌      | 5/10 [00:00<00:00, 549.90it/s, loss=2.454, v_num=2]
Validating: 0it [00:00, ?it/s] ---/pytorch_lightning/utilities/distributed.py:37: RuntimeWarning: The metric you returned None must be a `torch.Tensor` instance, checkpoint not saved HINT: what is the value of loss in validation_epoch_end()?
  warnings.warn(*args, **kwargs)
---/pytorch_lightning/utilities/distributed.py:37: RuntimeWarning: Can save best model only with loss available, skipping.
  warnings.warn(*args, **kwargs)

...

Epoch 4: 100%|████████████| 10/10 [00:00<00:00, 911.31it/s, loss=1.847, v_num=2]
                              Saving latest checkpoint..
Epoch 4: 100%|████████████| 10/10 [00:00<00:00, 761.27it/s, loss=1.847, v_num=2]

Expected behavior
Results from validation_step and validation_epoch_end should both be logged according to what is specified. The .log(..., logger, on_step, on_epoch) method provides enough granularity to specify how each metric should be processed for both validation methods.
I have tried using return [result, outputs] in validation_epoch_end to work around this, but the metrics in the EvalResult are assumed to be reduced to scalars if validation_epoch_end is overwritten and are therefore not handled correctly.
Environment

PyTorch-Lightning Version: 0.9.0
PyTorch Version: 1.6.0
OS: linux
How you installed PyTorch: pip
Python version: 3.6.9