An array action creates the first new object when the associated parameter is equal to 2X the column offset. It creates the second new object when the associated parameter is equal to 3X the column offset, etc... When you know that, then it is obvious that having any number of different array actions with the same column offset associated with the same linear parameter will always result in all of the objects arraying at the same parameter values.
If you want the objects to array at different values then you need to either change the column offset or the length of the associated parameter. The solution to your block is to create two additional chained linear parameters (the main parameter will work for one of the arrays), turn off their grips, make their starting lengths appropriate for when you want their new arrayed objects to appear, and stretch them all with a stretch action that is associated with the main linear parameter. See attached.
It is also probably worth mentioning that you added an increment (not a constraint) to the main linear parameter. Constraints are something else and there are none in your block.
Being unable 'to get the outer rectangle to sit above the internal lines' is a draworder issue. Newly created objects will be drawn to the front of objects that already exist. When arraying objects, the array creates new objects, so they will be drawn to the front of other objects. Luckily, if an array action arrays more than one object and those objects have a specific draworder relative to each other, then the new objects created by the array will respect the same draworder relative to each other. To get the display correct for the outer rectangle, I broke it up into pieces, set their draworder correctly, and arrayed them along with the thick polyline objects.