Ich kenne mich mit VB nicht und mit .NET nur wenig aus. Was mir aber auffällt ist, dass hier bisher gar nicht richtig zwischen deinen beiden Testfällen unterschieden wurde. Mehrere Threads sind schließlich etwas anderes als mehrere vollkommen unabhängige Prozesse. Ich vermute, dass dir die .NET-Runtime einen Strich durch die Rechnung macht.

Hast du mal versucht, mit Wireshark o.Ä. zu untersuchen, ob dein Programm überhaupt alle Verbindungen "gleichzeitig" aufbaut? Ich vermute, dass zu einem Zeitpunkt immer nur ein Teil deiner Uploads läuft und der Rest warten muss.

Eine andere Frage: Benutzt du HTTP(S) für die Uploads?