Side issue: with no engine changes there seems to be a bug with r.TemporalAASamples. If increased much beyond the default 8 (I noticed it starting at 12) it will periodically run with what looks like no jittering and a lot of aliasing accumulation, and then return to jittering and look fine, over and over. Also this ensure gets tripped:
ensureMsgf(TemporalJitterIndex >= 0 && TemporalJitterIndex < TemporalJitterSequenceLength,
TEXT("TemporalJitterIndex = %i is invalid (TemporalJitterSequenceLength = %i)"), TemporalJitterIndex, TemporalJitterSequenceLength);
And it seems TemporalJitterIndex goes negative. Seems the Halton function will always return 0 when it is given a negative index and that probably causes the oscillation between aliased/unaliased.
edit: Ah, it seems to only happen at low screenpercentages, and so be due to this line boosting the sample count beyond int8 positive range:
// When doing TAA upsample with screen percentage < 100%, we need extra temporal samples to have a
// constant temporal sample density for final output pixels to avoid output pixel aligned converging issues.
TemporalAASamples = float(TemporalAASamples) * FMath::Max(1.f, 1.f / (EffectivePrimaryResolutionFraction * EffectivePrimaryResolutionFraction));
(TemporalJitterSequenceLength gets set from that)
This line should instead clamp to 127, since it gets put into an int8 at some point:
TemporalAASamples = FMath::Clamp(TemporalAASamples, 1, 255);