No le veo problemas a tu código. Puede ser por que no estás controlando que haya una fila seleccionada.
 
Public Function Seleccion() As ArrayList
Dim cadena As New ArrayList
Dim row As New DataGridViewRow 
If IsNothing(Me.GrillaListarPedidos.CurrentRow) Then
  Return ""
End If
 row = Me.GrillaListarPedidos.CurrentRow
For i As Integer = 0 To (CInt(Me.GrillaListarPedidos.ColumnCount - 1))
cadena.Add(row.Cells.Item(i).Value.ToString)
Next
Return cadena
End Function 
Luego deberás controlar que cuando la función retorne una cadena vacía no haga la inserción en la segunda grilla. 
Pdta: Si el problema persiste, puedes probar usando un 
for each para recorrer las columnas. Es prefereible trabajar con For Each cuando se trata de colecciones por que se evitan los errores de índices.    
Código Vb.Net:
Ver originalDim Celda as DataGridViewCell
for each Celda in row.Cells
  cadena.Add(Celda.Value.ToString)
Next
  
Saludos.