Create Seamlessly Looping Animated Displacements
You generate the displacement mathematically by combining multiple Sine waves at different amplitudes, frequencies and orientations. By carefully selecting the frequencies of the waves you can ensure that they all coincide at the start/end so that the animation can be looped.

Here's the result :



This is produced by the following material :



This looks complicated but look closely and you'll see that it is actually made up of 5 virtually identical sets of nodes - to combine 5 waves.

Here the coordinates (adjusted to move the origin to (0.5,0.5) by the Subtract RGB node) are passed through a Mapping node so as to rotate them by a variable amount and this is then separated into its X coordinate (since we only need a linear value per wave). This is then passed through a Multiply node to set the frequency of each 'wave', with the multiplier for each being set to a multiple of 2*pi - this is what ensures the animation will loop correctly. This used to drive the Sine function and scaled by variable amounts (so the different waves have different influences) before being added together and passed to the displacement. The Value node varies the offset between 0.0 (on frame 1) to 1.0 on frame 51, with the animation running from frame 1 to 50 (since 51 should be identical to 1) - ensure to use Linear interpolation on your f-curve for the keyframed Value node.

Play around with the Mapping node orientations and the multipliers (for amplitude and frequency - but keeping the frequencies as multiples of 2*pi!) until you get suitably pleasing results.

Blend file included