Repare que você esqueceu de colocar um ponto “.” antes de ui.-tabs-panel:visible
EDIT:
Quando você mexe com componentes/layouts dinâmicos, você pode utilizar alguns outros seletores que facilitam muito, como por exemplo: @parent, @child, @next, @previous, @composite, etc.
@parent -> pai do componente atual
@form:@child(0) -> primeiro filho do form
@next -> proximo componente
@previous -> componente anterior
Abaixo tem um uso do seletor @parent, no caso ele atualiza o outputPanel
<p:tab>
<p:outputPanel >
<p:datatable >
</p:datatable>
<h:panelGrid>
<p:commandButton value="Atualizar" update="@parent:@parent"/>
</h:panelGrid>
</p:outputPanel>
</tab>
O primeiro parent (pai) é o h:panelGrid e o segundo é o p:outputPanel
Você também pode fazer combinações de seletores:
@form:@child(0):@child(1):@(.ui-datatable):@next
No exemplo abaixo eu estaria atualizando todo o h:panelGrid
O seletor aponta o update para o form, depois pro primeiro filho do form(tabView), depois pro segundo filho da tabView (segundo p:tab), depois para a datatable e por fim aponta para o componente declarado logo depois da datatable (h:panelGrid)
<h:form>
<p:tabView>
<p:tab >
</p:tab>
<p:tab>
<p:outputPanel >
<p:datatable >
</p:datatable>
<h:panelGrid>
<p:commandButton value="Atualizar"
update="@form:@child(0):@child(1):@(.ui-datatable):@next"/>
</h:panelGrid>
</p:outputPanel>
</tab>
</p:tabView>
</h:form>