Charge plugin: subscription start and end dates not updating for recurring subscription payments
Not really a solution, I know, but in the absence of any support from the developer on this there may be a workaround.

In my case I've been developing using planIntervals of only 1 day so I can see what's going on. As noted in your question, it never updates to the correct currentPeriodEnd, but it does seem to be updating. It looks like it updates to the end of the next but last payment taken. Here's an example:

I've got three payments taken for this subscriber:

2018-07-26
2018-07-25
2018-07-24


With the last payment being on 26 July, currentPeriodEnd should be 27 July. It isn't. It's outputting 26 Jul, the period end of the next to last payment. Or maybe the actual date the last payment was taken. I'm not sure.

Rather than fix this, I'm probably just going to test for the subscription being active and adding the planInterval to the currentPeriodEnd. But only if more than the initial payment has been made.

{% if charge.subscription.status == "active" %}

    {% if charge.payments | length &gt; 1 %}
        {% set paymentEnd = charge.subscription.currentPeriodEnd | date_modify("+1 day") %}
    {% else %}
        {% set paymentEnd = charge.subscription.currentPeriodEnd %}
    {% endif %}

    {{ paymentEnd | date('j M Y') }}&lt;br&gt;
    {% set daysToRenewal = date(paymentEnd).diff(now).days %}
    {{ daysToRenewal }} days to renewal&lt;br&gt;&lt;br&gt;
    {# Send email to subscriber if exactly 28 days to go #}

{% endif %}