I'd start by suggesting a full factory reset and reprovision, using the latest 3CX supported templates on V18 Update 5, and Yealink firmware 150.86.0.38
If you have the ability on your network hardware, here is one of the best methods you can use:
1. Put the phone on LAN (not WiFi for obvious reasons)
2. Mirror your network port and start a packet capture (using the phone MAC as a capture filter)
3. On the PBX machine, start another packet capture, you might want to use t-shark for this
4. Wait until the phone drops out, and stop the capture.
In the Mirrored port capture
Check to see if the phone is sending REGISTER messages to the 3CX IP.
It should send one roughly every minute.
See if it got any replies from the 3CX IP and what the replies contain.
In the PBX capture
Check based on equivalent timestamps, to see whether the REGISTER messages reached 3CX using the phone extension as a filter.
See what 3CX replied to the phone, but then go back to the original capture, to see if the reply ever found its way back to the phone.
It could be that the firewall/ISP is changing the Contact IP and or Port before forwarding the INVITE to 3CX, and the reply comes back to an invalid destination, which the firewall will drop. Restarting the phone "refreshes" the UDP session, and the problem temporarily goes away, but only so long as the firewall/ISP plays nice.
I think this method will get you as close to the truth as possible, although it does require some careful planning and patience.