Thanks for the explanation. I did suspect that this is a WebKit oddity.
In this situation I need the selects to always have a selection, which WebKit isn't doing. I also need the selected option's text to display elsewhere. Instead of checking for WebKit's behavior every time, I added a simple function. It only changes the selection if the new value exists, and returns the selected object's DOM object so I can access its value and text without additional jQuery calls.
$.fn.setSelectVal = function(value)
this.children('option[value="' + value + '"]').attr('selected', 'selected');
var select = this.get(0);
In both Safari and Firefox, adding the selected attribute to an option automatically causes attribute removal on the prior selected option. I'm not sure if it's smart to count on this, but it works for me right now and I have a very small user base.