Ciao, c'è un'incongruenza nella logica di funzionamento.

In sostanza, l'indice delle righe nella tabella, quello che assegni quando aggiungi un articolo, non ha necessariamente una correlazione con l'indice delle voci nell'array, perché quest'ultimo viene ridefinito ogni volta che modifichi l'array stesso, in base all'ordine assunto dagli elementi dopo la modifica.

Come tu stesso hai appurato, quando la rimozione avviene dall'ultimo al primo articolo nella tabella, l'ordine dei due indici (della tabella e dell'array) risulterà corrispondente, ma questo è un caso su cui non puoi fare affidamento.
Infatti, se vai ad eliminare le righe in diverso ordine, per forza di cose gli indici (tra tabella ed array) ad un certo punto non corrisponderanno più tra loro, perché appunto l'indice degli elementi nell'array viene di volta in volta modificato.

Vedi tu come credi sia meglio intervenire.

Personalmente, alla rimozione delle righe sulla tabella, andrei semplicemente a ricreare l'intero array secondo ciò che risulta dalla tabella, così da evitare ogni possibile incongruenza.

Inoltre noto che, per rimuovere le righe della tabella, utilizzi un procedimento macchinoso, andando a richiamare la funzione eliminastato() alla quale passi l'indice definito per quella riga. In più il tutto è gestito attraverso l'evento onclick che definisci sui singoli tag.

Dal momento che usi jQuery vedo più semplice è funzionale assegnare l'evento via script con un unico selettore (anziché avere gestori di evento sparsi tra i tag) e gestire la rimozione delle righe attraverso un riferimento relativo del pulsante con la riga in cui sta (vedi l'uso della parola chiave this e del metodo parent() e simili). Chiaramente è giusto un consiglio.