Sometimes brute-force is the best approach. However, you're unlikely to be taking advantage of your CPU. As a very basic start, use parallelisation to take full advantage of your machines processing power.
Parallel.ForEach(whitePatterns, wp =>
{
int col = wp.pattern.Length;
int row = wp.pattern[0].Length;
for (int x = 0; x < myBoard.Size - col + 1; ++x)
{
for (int y = 0; y < myBoard.Size - row + 1; ++y)
{
for (int xx = 0; xx < col; ++xx)
for (int yy = 0; yy < row; ++yy)
{
count++;
if ((myBoard.board[x + xx][y + yy] & wp.pattern[xx][yy]) == 0)
{
goto loopY;
}
}
// Found a match!
loopY: ;
}
}
});