Aside from the apply map or inline load you might try dual if statements to create the field.
if(CURRENT_OWNER=Null(), Dual('Not Specified',3) as CURRENT_OWNER
The first value in the Dual() function is the text you see in the field on the sheet objects, the second value is how they are sorted. So your list box would look like
Not sure why, but my list boxes worked properly when I used dual if to create the related field, but acted weird with plain if statements. If it solidified my list boxes it might make your other items function properly as well. I quit using plain if statements in my script though they seem fine out in the chart expressions.
Benefit of dual if statement is that you don't need to make separate mapping tables and it is easier to read when handling more complex or convoluted data. Drawback is (according to a colleague) that if statements take a little more load time than the apply maps- I think the difference is measured in fractions of a second though. I do believe both the if statements or apply maps (or any other function apply to a field being loaded in script) will slow the load down compared to an unaltered .qvd optimized type load.
I agree your if statement should just do what it says, but I think some background logic in QlikView likes the dual if better for whatever reason. (Maybe the broader more explicit instruction fills some tiny gap in the background QV logic.) I had an issue in another post where getCaption in a macro would rather get the object id than the caption and we could only make it get caption by making the object id the same as the caption. ☺ (Super 30k point posters gave the me and the other person right macro syntax, but I had to ascede to QV logic to make the jump from the correct syntax to the desired result.) It seems to me that the best solutions end up being whichever correct solution QlikView likes the best. ☺