Что ж, потратив несколько часов на ковыряние и (плохо) просматривая код django, я наконец-то нашел то, что работает. Я думаю, можно с уверенностью сказать, что ifchanged работает с тем, что уже вычислено, а не с тем, что было последним значением в цикле.
Вот пример кода, который работает для вышеуказанной ситуации:
{% for c in list %}
{% ifchanged c.group %}
group has changed!
{% endifchanged %}
{% ifchanged c.active %}
{% ifchanged c.group %}
{% else %}
item is active!
{% endifchanged %}
{% endifchanged %}
{% endfor %}
Таким образом, c.active оценивается каждый раз, и «элемент активен!» отображается как следует. В какой-то момент это может привести к «получению», в зависимости от того, работает ли «c.group» между обоими проверенными тестами. Я не уверен, но это работает для меня до сих пор.
Надеюсь, это поможет кому-нибудь еще, кто окажется в этой ситуации.