Seems, the point is we at first create the array on stack, then copy/move to heap, i.e. first is executed [1_i64; 100000000] leading to array creation in stack.
Well, Box::new is an ordinary function and ordinary functions take their arguments on the stack. The stack overflow is only avoided if the compiler can optimize it out.
One way to create a box without running into this issue is to first make a vector, then use Vec::into_boxed_slice to get a box. This will give you a Box<[i64]>, which you can turn into a Box<[i64; LEN]> via the TryFrom trait.