El primer problema que tienes es que estás listando todos los técnicos N veces para obtener una sola fila. Debes almacenar el listado en una variable la primera vez que lo obtienes y luego recorrer esa variable en vez de llamar x.getListarTecnicos() tantas veces.
Hace mucho que no uso VB.NET así que mejor te lo voy a escribir en C# y tu haces la traducción:
Código:
var tecnicos = x.getListarTecnicos();
int tecnico = 0;
foreach (var documento in x.getListarDocumentos())
{
x.setRegistrarDocumento(tecnicos.Rows[tecnico].id, documento.id);
++tecnico;
if (tecnico >= tecnicos.Rows.Count)
tecnico = 0;
}
NOTA: Esto se puede hacer más eficiente con una sentencia SQL.