I have played both games, so this comes from my personal experience. However, I do prefer Halo to Call of Duty. I am mainly comparing Modern Warfare 2 and Halo Reach. This is not exactly fair, as Black Ops comes out in a few weeks, but I haven't played it yet.
I've broken these differences down into the follow catagories:
The Call of Duty and Halo franchises are very different in terms of gameplay. The biggest difference is that Call of Duty goes for a realistic feeling, while Halo is more of an arcade shooter.
In Call of Duty, the guns and settings are realistic. Most guns kill in a few shots, and there are a lot of things outside of shooting another player, such as calling in a tactical strike, or a helicopter. Call of Duty maps are (from my experience) more complex and larger.
In Halo, killing someone is much harder. Most weapons take multiple shots to kill, so battles are more drawn out. There are power weapons, such a sniper rifle or rockets that kill in a single shot, but they are limited in ammo, and placed strategically on the map. While Call of Duty allows the player to spawn with almost any weapon, Halo usually allows the player to spawn with a base weapon, and requires them to pick up better weapons on the map. Halo Reach has expanded the weapon choices in a few game types (such as Invasion) allowing the player to choose between a set of weapons to spawn with, but players can never spawn with "power" weapons in default games, except specific exceptions, such as snipers only. Halo also has player driven vehicles in multiplayer, while the Modern Warfare games do not.
Call of Duty has realistic movement. The player has a low run speed, sprint, can prone, and has a low jump height. In Halo, the players moves fast, can crouch, and has a very high jump height.
Halo handles health by giving the player a rechargeable shield, which will return to full charge outside of battle, and health under that which (in Reach, Halo CE and ODST) will not refill once diminished. Call of Duty has only health, which refills after a short time.
The type of games in both franchises have diverged. Both have base slayer, capture the intel/flag, plant the bomb, and many others. Both games also have a diverse custom game engine outside of online multiplayer.
Call of Duty has customizable classes, with any weapon, grenade type, and upgradable "perks", which are set by the player. Halo Reach has predefined load outs set for each game type that come with one or two weapons, grenades, and an "armor ability" which gives the player an ability not normally in the game, such as a jet pack or sprint. This goes back to the core of Halo, where every player starts the same.
Another big difference between the two franchises is how they reward dedicated players. In Halo, every person starts the game exactly the same. Everyone spawns with the same weapon, or is allowed to pick from a pool of the same weapons, so everyone begins on an equal footing. In Call of Duty, players are rewarded with better weapons, and better loadouts. This is controversial in video games, because it gives the better players, who have played the game more, better weapons than less experienced players. In Halo Reach, players earn credits which allows them to customize their armor, but this only changes the armor cosmetically, and does not provide any other benefits.
Halo allows players to customize and even build new maps through "forge", which is not possible in Call of Duty. Current Call of Duty games do not have a way to watch past games, but this is being added in Black Ops.
Not a part of the games themselves, but Call of Duty is multiplatform, while Halo is only for xbox.