After looking at animation I'm guessing you are not counting the blocks that could be freed up in next move incorrectly. To me it seems that you are counting the number of faces that will border with the grayed out area after each move. but this is incorrect because you can clear several blocks surrounding one single block exposing multiple of its faces. So for instance if you clear other blocs on Northern, Eastern and Western side of one block you expose three faces of this one block. You should count this block only once. So in other words you would need a mechanism that will track which blocks you have already counted so you don't count them multiple times.

Again this is just my guess based on observing your Algorithm progress through the board.