Not sure this will help anyone, but I worked with support for this for a while and ending up building a pretty multi-step solution.
1) I added a field 'Task_Exists' as a type checkbox
2) Built a wf that set it to True on creation of a task (linked to SR, CR, PR)
3) When closing a CR/PR I would check (if task exist & all task complete or NOT(task exists))
1) Added two fields (# changes as roll-up summary count on change_incident_link & Open_Change_Count)
2) When creating a change_lncident_link, I update Open_Change_Count = Open_Change_Count + 1
3) When closing change I update Open_Change_Count = Open_Change_Count - 1
4) I check to see if # Changes > 1 or Open_Change_Count = 1 (I had to do both as my data was pretty screwed up since I added this late)