Two "bricked" Xiaos [how to fix and how'd it happen]?

It looks like your loop logic is wrong. This:

 if(d<2){
    for (int x = 0; x<sizeof(sT)-1; x++){
      sT[x][0]= sT[x+1][0];
      sT[x][1]= sT[x+1][1];
    }  
    sT[sizeof(sT)-1][0]=0;
    sT[sizeof(sT)-1][1]=0;
    delay(noteBreak);
  }

should be like this:

        if(d < 2)
        {
            int final_entry_index = (sizeof sT)/(sizeof sT[0]) - 1;
            for (int x = 0; x < final_entry_index; x++)
            {
                sT[x][0]= sT[x+1][0];
                sT[x][1]= sT[x+1][1];
            }  
            sT[final_entry_index][0]=0;
            sT[final_entry_index][1]=0;
            
            delay(noteBreak);
        }

In the orginal, you are addressing memory that you do not own, who knows what you are overwriting. That is why your XIAO is bricked.