I use keepalived and don't know much about ucarp but I've always just disabled the master interfaces. That forces the slave to take over. If I want to make the slave the master, I reconfigure it and restart the service. I then reconfigure the old master to be slave, restart the service and enable the interfaces.
The following quoted text might help explain what the advskew parameter does.
"advskew: This optional parameter specifies how much to skew the advbase when sending CARP advertisements. By manipulating advskew, the master CARP host can be chosen. The higher the number, the less preferred the host will be when choosing a master. The default is 0. Acceptable values are from 0 to 254." - http://www.openbsd.org/faq/pf/carp.html
"... to work out the time until a CARP node thinks it's the master, calculate 3 * (advbase + (advskew / 255))" - http://kerneltrap.org/node/5607
So if you have three hosts, one master and two slaves and the slaves are configured like this:
slave1 - 3 * 1 + (10 / 255) = 3.117 seconds
slave2 - 3 * 1 + (20 / 255) = 3.235 seconds
Then slave1 will always become master before slave2 since it advertises more often. If for some reason slave1 is down, slave2 will become master.