Populating Fcurves Keyframe_Points
In
fc = mocap_action.fcurves.new(dp, index = i)

Delete index = i.
That sets fc.array_index which is for things like locations (index=0 targets X, 1 targets Y, etc.). You don't need it for shape keys.