Hi Samuel,
First, your question is not a usability question, so you should post questions like these in the Tech forum, where it'll get much more attention.
Secondly, I think you misunderstand the way combo boxes work with their Variable vs. their Special List. If you do not have a special list, it's straight forward: the combo box is populated with items from the list, so the Variable contains whatever is the first item's Identifier Value on start-up, unless the Variable has another value than its type's null value (NullIdentifier(), NullTextIdentifier(), 0, 0.0, "" or False depending on its type) and that value is in the list, in which case the default selected item is set to that.
If you add a Special List to the mix, you need to understand that whatever value from the Special List you select, your Variable is going to be set to its null value. That's why your variable is 0. This is good, because it signals your application that an item from the Special List is selected, as opposed to an item from the Source Record List. Keep in mind that most of the time, you'll populate a combo box with the output from a query, the Entity's Id being the Source Identifier Attribute, and your Variable being of type Entity Identifier. It would almost never make sense in such a scenario to want to assign the Value from the special list to the Variable.
But... of course, if your special list is more than a single item, you need to know which item has been selected. Enter the Special Variable. The Special Variable is a variable you specify to receive the Value of the selected Special List item. If the user selects an item from the Source Record List, it is set to its null value. Otherwise, it's filled with the Value of the selected Special List Item.
So, to wrap up, you didn't experience "strange behaviour", but quite normal, documented, behaviour of the Platform. To solve your problem, if you have a single item in the Special List, just test for 0 or NullIdentifier() (depending on your Variable's type) to see if the Special List Item is selected, if you have more than a single one, specify a Special Variable, and test its content when the Variable is null.
First, your question is not a usability question, so you should post questions like these in the Tech forum, where it'll get much more attention.
Secondly, I think you misunderstand the way combo boxes work with their Variable vs. their Special List. If you do not have a special list, it's straight forward: the combo box is populated with items from the list, so the Variable contains whatever is the first item's Identifier Value on start-up, unless the Variable has another value than its type's null value (NullIdentifier(), NullTextIdentifier(), 0, 0.0, "" or False depending on its type) and that value is in the list, in which case the default selected item is set to that.
If you add a Special List to the mix, you need to understand that whatever value from the Special List you select, your Variable is going to be set to its null value. That's why your variable is 0. This is good, because it signals your application that an item from the Special List is selected, as opposed to an item from the Source Record List. Keep in mind that most of the time, you'll populate a combo box with the output from a query, the Entity's Id being the Source Identifier Attribute, and your Variable being of type Entity Identifier. It would almost never make sense in such a scenario to want to assign the Value from the special list to the Variable.
But... of course, if your special list is more than a single item, you need to know which item has been selected. Enter the Special Variable. The Special Variable is a variable you specify to receive the Value of the selected Special List item. If the user selects an item from the Source Record List, it is set to its null value. Otherwise, it's filled with the Value of the selected Special List Item.
So, to wrap up, you didn't experience "strange behaviour", but quite normal, documented, behaviour of the Platform. To solve your problem, if you have a single item in the Special List, just test for 0 or NullIdentifier() (depending on your Variable's type) to see if the Special List Item is selected, if you have more than a single one, specify a Special Variable, and test its content when the Variable is null.