Como @njsg já disse, o problema é causado por find , não pelo shell: As aspas duplas que você está usando já estão protegendo sua expressão do shell; é passado para find não modificado.
O problema é que find trata o argumento como -name e -iname como um padrão. A única maneira de suprimir isso seria usar uma opção find que não trata seu argumento como um padrão. Mas find não tem tal coisa, de acordo com a minha página de manual, então o que você quer não pode ser feito. O melhor que você pode fazer é aprimorar seu script para escapar dos colchetes automaticamente, antes de passá-los para find . A seguinte substituição sed de aparência engraçada fará isso por você:
echo "foo [bar]" | sed 's/[][]/\&/g'
imprimirá: foo \[bar\]