I have used Migrator.NET and SubSonic. I believe Migrator.NET has been in development for longer and I prefer it over SubSonic.
Migrator.NET finds migrations in your assembly (project) based on an attribute, not the filename. Filename is more in line with the convention over configuration way of working, and is probably inspired by Ruby on Rails. I find attributes to be more natural for .NET.
Migrator can execute provider specific SQL queries in your migrations. It's not something you do often, and it might not even be recommended, but it can really be valuable when you need it.
The codebase for Migrator.NET seems very solid to me. They have a nice provider model that accounts for the vendor specific syntax/rules. There are also several runners available: console, MSBuild and Nant, and there's also a contributed webforms runner for ASP.NET. I usually configure the MSBuild runner as an External Tool in Visual Studio.
Edit: I have written an article explaining how to run migrations in Visual Studio.
One thing missing from Migrator.NET is configuration using web.config, but that's a minor issue, since you usually configure it once and then forget about it. But the way it's done in SubSonic makes it overall easier to switch configurations, like when you need to run a migration on the staging or live server, instead of on your local machine.
Hope that helps!