Does the erroneous line in your World.step() method have square brackets in it anywhere? Or a get() method of some sort with an index in it.

This error suggests that you're asking for an object in an array or list by providing an index outside of the array bounds. Array bounds start at 0, and end at array.Length - 1.

So a lot of the time this error is caused by looping through objects in an array up to and including array.Length or list.Count

EDIT:

The issue appears to be here (like you suggested):

 
 //Enable the new body
 nBody.Enabled = true;

 //Disable the current body
 mBody.Enabled = false;

 //Copy the current body's attributes to the new one
 nBody.SetTransform(mBody.Position, mBody.Rotation);
 nBody.LinearVelocity = mBody.LinearVelocity;
 nBody.AngularVelocity = mBody.AngularVelocity;

I was looking at the code for the .Enabled setter in [body.cs][1] in Farseer -- I haven't used Farseer personally so I don't know the exact details of the implementation, but it does a lot of disposing and destroying things when you set enabled to false. I would recommend just rearranging your code like this and giving it a go:

 //Enable the new body
 nBody.Enabled = true;

 //Copy the current body's attributes to the new one
 nBody.SetTransform(mBody.Position, mBody.Rotation);
 nBody.LinearVelocity = mBody.LinearVelocity;
 nBody.AngularVelocity = mBody.AngularVelocity;

 //Disable the current body
 mBody.Enabled = false;

 mBody = nBody;


 [1]: http://farseerphysics.codeplex.com/SourceControl/changeset/view/94324#1436530