Ethernet UDP hang

OK. That takes that out of the picture.

Next, this:

    if (Udp.remotePort() == remotePort) {   //Sometimes the remotePort is different... I not sure why.
      memcpy((byte *)&in, packetBuffer, sizeof(_dataIn));
      //Assign incoming value to local variable
      //Prepare the output struct
      Udp.beginPacket(remoteIp, remotePort);
      Udp.write((byte *)&out, sizeof(_dataOut));
      Udp.endPacket();
     }

I presume this is the server end. Is that correct? Your "server" is responding to another device UDP request?

What type device is on the other end, sending the request?

The reason the remote port is different is most of the time is that the client will not normally use the destination port. All my clients use ports other than port 80 on the client end to make http requests.

What is the value assigned to remotePort in your code? Maybe you should be using the port sent by the requesting device to reply to the request.

edit: If your ethernet shield is exposed to the internet, it may not be your device making some of the requests. It could be a port scanner looking for open ports to exploit.