It seems to be a common bug, specifically when it comes to liberating Haafingar, as the UESP mentions these two items by name:
The "Liberate Haafinger" and "Report to Ulfric Stormcloak" objectives will not be marked as completed in the quest log once the quest is complete.
It doesn't mention a solution.
However, a Reddit user, experiencing the exact same problem, mentions a workaround that worked for them. The idea is to force the next step by going to Solitude:
Enter Solitude anyway. Your orders would have been to join the men and attack Solitude. When you enter the city, Ulfric, Galmar, and the rest of the Stormcloaks, magically appear behind you and trigger the battle.