Rendering multiple borders by a script
Pawel,

Not really an answer

even though the code below looks like a significant rewrite, it's mostly just for generic OS use...
What I had noticed running through the script below (which is likely causing the sync &amp; updating issues you're referring to) is that the renders are generated based on the segmented window throughout the entire animation sequence, then moving to the next segmented window and running through the entire animation sequence again.
As such any interpolation of animation &amp; raytracing, etc will be recalculated not only frame by frame, but each segment frame by frame.

If you watch the console while running this you should see what I mean.

    """
This script:
Verifies, the active blend file is saved
Generates a folder for the active blend file where it is saved
Generates sub folders for each scene
Renders for each scene
All naming is based on names used in blend file (blend file name, scene names, object names)
For different render options change the true/false option at ~line 52 &amp; blender menu options
"""
"""
http://blender.stackexchange.com/questions/47530/rendering-multiple-borders-by-a-script
"""

import bpy
import os

filepath = bpy.data.filepath
osdir = os.path.dirname(filepath)
osfile = os.path.basename(filepath.replace('.blend', ''))

selected = bpy.context.selected_objects

list_of_all_scenes = bpy.data.scenes
scene = bpy.context.scene

n = 8
m = 8

if bpy.data.is_saved:
    for scn in list_of_all_scenes:
        bpy.context.screen.scene = scn
        if not os.path.isdir(os.path.join(osdir, osfile, scn.name)):
            os.makedirs(os.path.join(osdir, osfile, scn.name))
    for scn in list_of_all_scenes:
        bpy.context.screen.scene = scn
        cnt = 0
        scn.render.tile_x = 16
        scn.render.tile_y = 16
        scn.render.resolution_x = 800
        scn.render.resolution_y = 600
        scn.render.resolution_percentage = 100
        scn.render.use_border = True
        scn.render.use_crop_to_border = True
        for i in [x * 1.0/n for x in range(n)]:
            for j in [x * 1.0/m for x in range(m)]:
                scn.render.border_max_x = i + 1.0/n
                scn.render.border_min_x = i
                scn.render.border_min_y = j
                scn.render.border_max_y = j + 1.0/m
                cnt += 1               
                bpy.context.screen.scene.render.filepath = os.path.join(osdir, osfile, scn.name, scn.name + "_cnt(" + str(cnt) + ")_frame(" + str(scn.frame_current) + ")_auto")
                bpy.ops.render.render(animation=False, write_still=True, use_viewport=False, layer="", scene="" )