I think this would be tidier with multiple return statements:

		if (geoBoxes.size() > 1) {
			if (helper.isMultiPoint(geoBoxes)) {
                return helper.toGeometryFromCoordinateText('MultiPoint', geoBoxes)
            }

            def boundingBoxes = []
            geoBoxes.each { geoBox ->
                geoBox.each {
                    boundingBoxes << helper.toBoundingBox(it.split(" "))
                }
            }
            return helper.toMultiPolygonFromBoundingBoxes(boundingBoxes)
		}
		
        return helper.toBoundingBox(geoBoxes[0][0].split(" "))

Or you could go one step further by adding a new method to GeometryHelper (If you thought it appropriate):

		if (geoBoxes.size() > 1) {

			if (helper.isMultiPoint(geoBoxes)) {
				return helper.toGeometryFromCoordinateText('MultiPoint', geoBoxes)
			}

			def boundingBoxes = helper.toBoundingBoxes(geoBoxes) // <-- this would need to be written
			return helper.toMultiPolygonFromBoundingBoxes(boundingBoxes)
		}

		return helper.toBoundingBox(geoBoxes[0][0].split(" "))