Hi jki, I suspect that somewhere in your model you've got a degenerate surface (a surface squished down to not have any actual surface area), or a degenerate edge somewhere (edge compressed down to a single point), which is making intersection calculations get all messed up.
Also it can be difficult in general for booleans to deal with objects that just barely skim right over the same overlapping surface area, although usually if the overlap is very precise it can be ok.
re:
> But if i try to union the body with a prism, which is just longer than the previous one
> (exact copy and scale), the solid breaks apart: (but the object it still treated as solid!)
A quick fix for this one is to select the body and run the ShrinkTrimmedSrf command:
http://moi3d.com/3.0/docs/moi_command_reference10.htm#shrinktrimmedsrf
After you have run ShrinkTrimmedSrf on the body it seems to boolean ok with the box.
> In bottom row I tried to union two solids, the result is much more interesting, one of
> them is OK, however the second one is broken (but still reported as "solid")
It looks like running ShrinkTrimmedSrf on both of these pieces will then let this union go ok too.
Another alternative to get these pieces combined into one is to do a face selection of all the bottom box pieces, use Edit > Separate to break those off into a separate object, then do boolean union on just those box pieces, and finally select all the pieces and use Edit > Join to glue them together. That will avoid having the boolean go through and try to intersect all the upper parts with one another. Somehow there is a surface somewhere in the upper pieces that is making the surface/surface intersector get confused when it tries to use it.
So anyway the quickest fix for the moment is run ShrinkTrimmedSrf on your base object.
Hope this helps,
- Michael