I don’t have any special insight into how Dialyzer works beyond what LYSE has to say about it - and I don’t have access to your code to poke and prod it.
In any case I typically try to corral the problem into a fairly small code sample with which I can experiment fairly quickly and liberally and observe how Dialyzer reacts to any particular change. Once I figure out how it behaves it leads to stuff like this.
It’s one thing to assume to know how something works but with Dialyzer it’s usually instructive to test all assumptions.