The stems from a really old change (CL 2948683) to fix [Link Removed].
Compiling ObjectA will call RefreshExternalBlueprintDependencyNodes on its dependent BP,
ObjectB_ReferencesA, which reconstructs the nodes. After this call, we remove the dirty flag from ObjectB_ReferencesA. This is why ObjectB_ReferencesA is not marked for dirty.
Additionally, ObjectB_ReferencesA is recompiled because its a dependent BP of ObjectA. After compilation, ObjectC_UsesClassDefaultsB is notified via the OnBlueprintCompiledDelegate delegate. The delegate reconstructs the GetClassDefaults, which dirties the package.
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-196326 in the post.