Thank you! Adding the extra space between the quotes did the trick, and I'm now seeing the username swap out the firstname (and lastname) in the manner I wanted.
Here's the code I ended up with:
Code:
[cb:if cb_firstnameconditional!=" " or cb_lastname_conditional!=" "]
[cb:if cb_firstnameconditional!=" "][cb:userfield field="firstname" /][/cb:if]
[cb:if cb_lastname_conditional!=" "][cb:userfield field="lastname" /][/cb:if]
[cb:else][username][/cb:else]
[/cb:if]
Now, if a user sets their firstname or lastname to be private, the username will display instead. Thanks again!