Ok. First things first the DrayTek call direction MUST be set 'Both'. No matter what I tried I could not get this to work with it being 'Dial-Out'. You will also need to set the 'Idle Timeout' to 0 which will keep the tunnel up indefinitely. As the call direction is set to both, make sure you fill in '3. Dial-In Settings' so the pfSense can renegotiate the tunnel where required. My phase 1 lifetime is set to 28800 seconds and my phase 2 lifetime is set to 3600 seconds.
On the pfSense, make sure that 'Key Exchange version' is set to 'V1'. I found that leaving this to 'Auto' broke the tunnel as pfSense tried to reinitialize the tunnel using IKE V2 by default, and DrayTek only supports IKE V1. That's all I really needed to set of the pfSense side. Under 'Avdanced Options' I have left both 'Disable Rekey' and 'Responder Only' unchecked but have 'Dead Peer Detection' enabled. My phase 1 lifetime is set to 28800 seconds and my phase 2 lifetime is set to 3600 seconds.
This setup does mean you need to bring the tunnel up manually, however if either side receives any traffic for the remote network either peer will be able to bring the tunnel up. Once the tunnel is up, it will remain stable regardless of wether or not any traffic passes through it.
This should fix the issue and you should have a stable VPN tunnel, you can check this by looking at the 'UpTime' on the DrayTek under 'VPN and Remote Access' > 'Connection Management' > 'UpTime'. My tunnel has been up for over 48 hours now whereas previously I this was disconnecting constantly.
If you're still struggling with this, if you are happy to provide me access to both a DrayTek and the pfSense, I am happy to take a look at this for you.
Hope this helps!