Ho indagato un po' via reflection sul tipo ritornato da System.Type.GetType("System.Int32[*]").
Ha due costruttori, tutti e due instance: il primo costruttore ha un parametro int con significato di lunghezza dell'array (in questo caso il limite inferiore sarà zero!) mentre il secondo costruttore ha due parametri int: il primo parametro rappresenta il limite inferiore mentre il secondo parametro rappresenta la lunghezza meno il limite inferiore. Sono riuscito quindi a costruire un array unidimensionale non-vettore (cioè di limite inferiore diverso da zero) utilizzando System.Activator.CreateInstance (al posto di System.Array.CreateInstance).
Il codice relativo nei prossimi giorni, adesso ho un po' di fretta di andare a letto :-)