@Jorge_Estima, agradeço mais uma vez a tua observação, e confirmo que adicionando um número aleatório negligenciável resolve o problema.
Senso assim, faço a reformulação do sensore que antes escrevi, substituindo o que tenha em template, tal como o @dgomes sugeriu, por um com trigger (todos os outros mantêm-se):
template:
- trigger:
- platform: time_pattern
minutes: '/15'
seconds: 1
sensor:
- name: last_15min_period_consumo_energy
unit_of_measurement: kWh
state: >-
{% set consumo = state_attr('sensor.p15min_energy_consumo_rede','last_period')|float(default=0) %}
{% set excedente = state_attr('sensor.p15min_energy_excedente_rede','last_period')|float(default=0) %}
{# (consumo - excedente) if (consumo > excedente) else 0 #}
{{ (consumo - excedente + (range(0,99)|random/100000000)) if (consumo > excedente) else 0 }}
Resultados (Neste caso estou a usar um igual, mas para o excedente, onde tive 2 valores de seguida iguais, às 11:15 e às 11:30):
Por exemplo, às 12:00 e 12:15 também tive valores iguais, mas já aparece um ponto de actualização no gráfico:
e o acumulado diário, sempre crescente, confirma:
Fica assim por enquanto.

EDIT:
Resolvi evitar ainda a remota possibilidade de haver 2 números aleatórios iguais de seguida, e passei a usar o [resto da divisão por 2] do valor dos minutos (última linha do sensor).
{{ consumo - excedente + ((now().minute%2)/1000000000) if (consumo > excedente) else 0 }}