You need Type.GetElementType() to get the non-array type:
object x = new Int32[7];
Type t = x.GetType();
object y = Array.CreateInstance(t.GetElementType(), 7);
Alternatively, if you can get the type of the element directly, use that:
Type t = typeof(int);
object y = Array.CreateInstance(t, 7);
Basically, Array.CreateInstance needs the element type of the array to create, not the final array type.