In your code, you input the initial x and v during every loop iteration - not the most recent x and v. That is why you just get two circles on top of each other.
This small change gives me a figure that looks, not quite like the first one you posted, but a whole lot closer, and you can work from there :)
x1=x; %initial positions 'zeroed'
x2=x;
for time = 1:1:n
[x1,v] = boris_rotation(x1,v,charge,mass,dt,B1,E); %input x1 instead of x
[x2,v2] = boris_rotation(x2,v2,charge,mass,dt,B2,E); %input x2 instead of x, and also v2 instead of v
X1(time,:) = x1;
V1(time,:) = v;
X2(time,:) = x2;
V2(time,:) = v2;
end