in our layout--two-col (and I'd suspect three col as well), if we have nothing in the top region we still print an empty region.
However, since we have gap set for the layout, then we get that extra gap at the top. This is very very noticeable if you have a large gap (e.g. 3rem).
Drupal checks in the template for {% if content.top %} but since the render array will at minimum send down an #attributes then {{ content.top }} will always equate to true. A check like {% if content.top|length > 1 %} means it will only return true if there is attributes plus something else.