From the information provided I believe the difficulty you are experiencing is related to your workspace environment, not your modeling and scene creation.
I suspect that if you look at the cache panel in your particle settings, the "# of frames in memory" displayed will be less than the total number of frames in your animation (this information is also represented graphically in the lower timeline).
If that is the case, then the reason you are seeing different results in the viewport and render is that they are using different data.
To fix your issue you should:
Set Playback sync to No Sync in the 3d viewport.
Invalidate the simulation cache data by changing physics values or moving the object.
Play the full simulation in viewport.
Verify all frames are cached in the simulation cache.
Render your animation.
Edit to add further information after comment: (Maybe should be a separate answer?)
I downloaded the blend file provided in the question, and made the following changes:
1) In the Properties Editor-> Render tab-> Render Panel
I changed the Render Device to CPU (I do not have a supported GPU)
and in the Properties Editor-> Render tab-> Performance panel set the tile sizes to 32 x 32 (for cpu use). I also set Properties Editor-> Render tab-> Sampling panel render samples to 80, to speed up testing.
(you may wish to duplicate this step to rule out any GPU compatibility errors)
2) I saved the file as a new blender file.
In the Properties Editor-> Render tab-> Output Panel
I changed the output file format from H.264 movie to PNG images, and set a new output directory.
(Rendering directly to movie formats can cause encoding errors, it is considered good practice to render image frames, and encode to movie format in an encoding pass)
3) I switched to the Video Editing screen layout
and changed the UV/Image editor to the Video Sequence Editor.
I then selected and deleted the Image Strip that is present.
(If there is any content in the Video Sequence Editor, blender will render that content instead of the current 3d scene, this can be disabled in the Properties Editor-> Render tab-> Post Processing Panel)
4) I switched back to the Animation screen layout
and in the Timeline, changed Playback Sync from AV-sync to No Sync.
In the Properties Editor-> Particle tab-> Emission Panel I changed the number of particles to 5001 (to invalidate the cache), I also made the Cache panel visible.
Then I played the simulation in the viewport to allow all frames to be calculated. After stopping the simulation, I checked that the particle cache had all frames in memory.
(this is the step outlined above this edit)
5) I saved the blender file.
I rendered the animation, seeing no errors in any frames.
I previewed the resulting sequence using the Info Bar-> Render-> Play Rendered Animation (Ctrl F11)
6) After being satisfied by the preview;
I again saved a new file with the name ParticleMovementTest_encoding.blend
I changed Properties Editor-> Render tab-> Output Panel output file format to H.264.
I switched to the Video Editing screen layout, and added an image strip, selecting the rendered frames produced in step 5, and rendered the animation again to encode the project into a movie file.
(If, in step 3 you disabled Sequencer in the Properties Editor-> Render tab-> Post Processing Panel, it will need to be re-enabled)
7) I verified the resulting file with VLC Player.
The above steps produced this render result (4mb).
Somewhere in the above steps lies the answer to your problem.