The booleans are working fine but the orientation of the polygons are super important. You can check the orientation your self, but one of the easiest checks if volume().

Hope that helps