Array modifier does strange things with mesh
It is very likely that merge distance is set too high. Array modifier behaves unexpectedly when the merge distance is larger than the object. Try applying the scale with Ctrl+A and setting the merge distance to a reasonable value. That should be all that's need to fix this. 

Modifier order does change the result, however they should work correctly in any order.