Muito comum em Nested Repeaters, ou em outros casos, quando o HeaderTemplate ou FooterTemplate é exibido mesmo se o Repeater não contiver dados. A solução é simples, no PreRender do Repeater, verificamos se ele contém dados, caso não tiver, o ocultamos.
Default.aspx
<asp:Repeater ID="repSubMenu" runat="server"
OnPreRender="repSubMenu_PreRender">
<HeaderTemplate>
<div class="submenu">
</HeaderTemplate>
<ItemTemplate>
<a href="">...</a>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
Default.aspx.cs
protected void repSubMenu_PreRender(Object sender, EventArgs e)
{
Repeater myRepeater = (Repeater)sender;
if (myRepeater.Items.Count == 0)
myRepeater.Visible = false;
}