In actionscript Arrays are passed as reference types not primitives. When you use BaseClip as the initObject in the duplicate movieclip call, you are implicitly assigning the Velocity array to duplicate as a reference. As a result subsequent changes to the indices of the Velocity array are actually happening on the same array. And since the last clip is the one changing the Velocity, the velocity takes its value then onwards.
The solution is to have a separate array for each clip instead.
// in the SpawnClips method
BaseClip.duplicateMovieClip("clip"+i, i, BaseClip);
Clips* = _root["clip"+i];
// reinitializing the Velocity array for each clip
Clips*.Velocity = new Array ();
Clips*.Velocity[0] = Math.random() * 5;
Clips*.Velocity[1] = Math.random() * 5;