It took me over a quarter dozen methods to finally be able to successfully and programmatically copy a content type from one web to another. Now, of the methods that failed, only one of them would replicate your exact problem and not completely combust, so I'll assume that is the method you attempted and analyze why it fails. Then I'll show you a method that works properly.
You cannot programmatically add fields to a content type instance which is only scoped on the web level. Attempting to do so provides the following clear error:
This functionality is unavailable for field collections not associated with a list.
So if your method was to basically create a content type in the new web that inherits from Item, and then just add your custom column, it would fail to add the custom column. I'm assuming that is how you tried to copy the content type, as every other approach I tried either failed, or worked and retained the field.
To make it work, create a new content type that is scoped to Web2's web level, but inherits from the original content type from Web1. So, using the ALICE content type I tested it with, you would have something like this.
SPContentType ct2 = new SPContentType(Web1.ContentTypes["ALICE"], Web2.ContentTypes, "ALICE");
Web2.ContentTypes.Add(ct2);
Web2.Update();
This created the ALICE content type on the second web, which has the custom column that the original ALICE content type has. Now, since the original ALICE content type isn't on Web2, then this ALICE doesn't actually inherit from that ALICE. It'll instead inherit from Item, which you can confirm both in the UI and programmatically. So it becomes a successful copy.
EDIT
Here is the exact code I used, minus a couple lines for outputting debug and not stating my actual Web2 address. It was run from a workflow on Web1. I guess instantiating a content type separately is the major difference. Let me know if this continues to produce that same error.
SPWeb website = null; //Web1, which has ALICE already.
SPWeb web = null; //Web2, which does not yet have ALICE.
SPSite site = null;
try {
website = workflowProperties.Web;
site = new SPSite('webaddress of web2');
web = site.OpenWeb();
SPContentType ct = website.ContentTypes["ALICE"];
SPContentType act = new SPContentType(ct, web.ContentTypes, "ALICE");
act.Group = "Custom Content Types";
web.ContentTypes.Add(act);
web.Update();
}
finally { if (web != null) { web.Dispose(); } if (website != null) { website.Dispose(); } if (site != null) { site.Dispose(); } }