Definir itens[proxPosicaoArr] = null; é redundante, pois o loop já trata dessa posição ao mover os elementos. Além disso, podemos evitar o erro de índice fora do limite com uma simples verificação condicional dentro do próprio loop:
// Move os elementos à frente da conta removida para uma posição anterior no array
for (int i = indiceItemASerRemovido; i < proxPosicaoArr; ++i)
{
// Define null ao final do array se o próximo índice estiver fora do limite
itens[i] = (i + 1 >= proxPosicaoArr) ? null : itens[i + 1];
}