В методе openTile(int, int) значение поля countClosedTiles должно уменьшаться на 1, если элемент матрицы gameField отмечается флагом isOpen. хотя работает корректно
private void openTile(int x, int y) {
        if (gameField[y][x].isOpen || gameField[y][x].isFlag || isGameStopped) {
            return;
        }
        if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors == 0 && !gameField[y][x].isOpen) {
            gameField[y][x].isOpen = true;
            countClosedTiles--;
            setCellValue(x, y, "");
            for (int k = 0; k < getNeighbors(gameField[y][x]).size(); k++) {
                openTile(getNeighbors(gameField[y][x]).get(k).x, getNeighbors(gameField[y][x]).get(k).y);
                setCellColor(getNeighbors(gameField[y][x]).get(k).x, getNeighbors(gameField[y][x]).get(k).y, Color.CYAN);
            }
        } else if (!gameField[y][x].isMine && gameField[y][x].countMineNeighbors != 0 && !gameField[y][x].isOpen) {
            gameField[y][x].isOpen = true;
            countClosedTiles--;
            setCellColor(x, y, Color.CYAN);
            setCellNumber(x, y, gameField[y][x].countMineNeighbors);
        } else if (gameField[y][x].isMine) {
            setCellValueEx(x, y, Color.RED,MINE);
            gameOver();
            return;
        }
        if (countClosedTiles == countMinesOnField) {
            win();
            return;
        }
    }