At this point, I would have to take a look at your project to know what is going on. I am still willing to help you solve this if you are willing to post the .capx file.
You know, I believe I just figured out the problem. Are you deleting the beginning BoxUnit on start of layout? If so, then when the system is trying to reference BoxUnit.Width or BoxUnit.Height, there is no object to reference so the value is 0. After the first BoxUnit is spawned in the wrong position, all the rest can reference it's size to get their positions. For my examples, I have a BoxUnit object in the layout but off the screen. The system is getting the size information from this object so my first visible BoxUnit is set correctly. I opened my project and created this event to test if it would give your results and it did.
There are 2 ways to fix this:
1: Don't delete the off-screen BoxUnit.
2: If you need to delete the off-screen BoxUnit for some reason, create each BoxUnit at an arbitrary location (such as position 0,0) and then use the above calculation to set the position of the newly created object.
The first option would be the easiest because it only requires removing 1 action. The second, you would have to add a new action positioning the new object. This action would have to happen in the same event as creating the object and would have to happen after the create action.
I am fairly confident that if you make 1 of the above changes your project will work properly.
Again, good luck with your project.