I do not have deep knowledge of LwIP but it seems that ethernet_input, under the netif folder is pretty low level. When the system stops handling network traffic, I can set a breakpoint in this function and nothing arrives.
After enabling the full debug output in LwIP, I was able to see that pbuff was allocated on receive and deallocated when library functions used the network but in my app, when a packet was received the buffer was never deallocated. To fix this, I added the missing wiced_packet_delete function call.
Seems to work so far...