I think this is the correct behaviour. For me GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(EMPTY)) is the (power) set of the empty set. - P(∅) = {∅} - |{∅}| = 1 => not empty and ST_isempty( GEOMETRYCOLLECTION(GEOMETRYCOLLECTION(EMPTY)) ) should return false.