I've caught these bugs while trying to implement this code in another project and trying to use an unavailable state as input for the search.

Fixing following bugs:

Bug 01: Priority list is not removing the key that maps a sub list when it is made empty in a Replace call;
Bug 02: frontierMap wasn't being used at all, in any momment was it being populated with new frontier nodes nor was it cleaned from already checked nodes;

Other changes:

01: Redundant exploredSet.Add(child) after Enqueuing a state (probably it was supposed to be frontierMap.Add(child, searchNode)
02: Removing if (frontier.IsEmpty) return null and using while (!frontier.IsEmpty), just because :)