I know (well, remember, actually) little about SQL, but if you're only trying to create a login object shouldn't you just use the Add-SqlLogin cmdlet?
The "UserType" enum just equates a value to a name. You can usually use just the value. The "SqlLogin" and "SqlUser" names are both assigned a value of "0":
AsymmetricKey 2 Specifies that the user login for the database is based on an asymmetric key.
Certificate 1 Specifies that the user login for the database is based on a certificate.
External 4 Specifies that the user is based on external authentication
NoLogin 3 Specifies that the user does not have a login for the database.
SqlLogin 0 Specifies a SQLLogin user. This is deprecated, use SQLUser instead.
SqlUser 0 Specifies that the user is either a SQLLogin user or a user with password.
There is an Add-SQLLogin, a Get-SQLLogin, and a Remove-SQLLogin cmdlet. It looks like the SQL folks (the ones that create the cmdlets for the SQL product) don't want to allow you to Set-SQLLogin.
You can, however, simplify your code by using the Remove- and Set- cmdlets instead of working with the SMO object.