Don’t know the cause, but found a simple workaround (UE 4.26).
Touch controller will stop vibrating after 3 or so seconds only if the amplitude stays the same. This can be easily prevented pulsating your amplitude a bit (not noticeable to user) Make Pulsating Value does the job.
IF you’re using OpenXR plugin, every SetHapticsByValue needs to be preceded by another SetHapticsByValue with frequency and amplitude set to 0. The amplitude being the same does not matter.

