$OPTIND indica o quanto você progrediu ao analisar a lista de parâmetros (por exemplo, para opções), enquanto $# é simplesmente o número de parâmetros. Eles não estão realmente relacionados, porque $OPTIND muda, enquanto $# não (a menos que você use shift ).
A descrição POSIX de getopts entra em detalhes.