I don’t think this needs explanation. If it does: inconsistent results in the different methods you can call to check if a widget is visible or not. Some of these are overcomplicated and check for one or two conditions.
If we look at the absolute simplest one, even that is broken:
// UWidget* ThatWidget ....;
// If SafeWidget is not valid:
bool bIsVisible = ThatWidget->IsVisible(); // == false, does not respect Visibility property.
bool bIsVisible = ThatWidget->GetVisibility == ESlateVisibility::Visible; // == true.
// ? Now what is with the dupe enumerator used in slate?
// SafeWidget->GetVisibility().IsVisible()
// If you do something in the engine, do it right or don't do it!