"I am wearing a dress."
If i am talking about myself wearing something, does the object have to be neuter?
No, it doesn't have to be neuter. "Sukienka" is a feminine noun.
"sukienka" [Nominative] → "sukienkę" [Accusative]
I was expecting "mam na sobie sukienkę", because the English form is "I am wearing a dress (now)", not "I wear dresses (generally)". Am I wrong?
As "sukienka" is singular, you can assume that means 'now', unless it's a situation when the speaker wears the very same dress all year long. "I wear dresses (generally)" will use plural in Polish just as it used it in English ("Noszę sukienki").
The perfective counterpart of 'nosić', that is 'nieść', works only for the second meaning ("to carry"), and not for "to wear". So if we speak about wearing, there will be no difference between "now" and "generally".
Having said that, "Mam na sobie sukienkę" is a valid translation in my opinion. Did you try it and get rejected, or are you just asking?
I thought that "I am wearing a dress" is a one-time event so should be "niosę", whereas "Noszę sukienkę" indicates a habitual action, and so should mean "I wear a dress." What am I missing here?
The right now/habitual distinction is important for the "carrying" distinction. I am carrying right now = Niosę, I carry generally = Noszę.
"Noszę" can mean "I wear" and it does indeed seem more habitual, but here we use it for the 'right now' as well. But a clearer translation of "I am wearing a dress right now" would be "Mam na sobie sukienkę" (I have a dress on me. Like, literally on me, my body).
"Niosę" has nothing to do with wearing.