I think it should be possible to filter out interrupt enter/exit events appearing like normal program flow changes / calls in a reliable way - if some of the CPU context is made available in the profiling data (either the status register or some housekeeping info belonging to UAE).
You can try to identify via the last instruction, but you could perhaps get unlucky and have an interrupt occur in the wrong place, causing a bogus link in your callgraph. This seems like a very rare occurrence but when you're dealing with capture over many seconds, even rare things happen frequently enough to contribute confusion (some of this can even be seen in the last DOT example)
I think filtering by the last opcode could help a lot but the best way is to know about the status changes in the CPU context - this info is unambiguous. I suppose the question is what/how much of that to record and whether it complicates another part of Hatari?
D.