I have confirmed your issue. Unfortunately this appears to be by-design for InfoPath. I believe it is a limitation of the way the inserting works by pulling unique fragments from the manifest.xsf file. Text values are simply embedded into the manifest fragment to be inserted, however, the expression is added as a default value formula for the field itself (not so with string values).
My gut instinct is that there is no direct workaround for this using the method you are using. I tried adding a rule to the field that is supplied the string value to set a different xpath expression based on the string, but inserting the new row didn't automatically run the rules. Therefore this method doesn't work.
However, you can probably use code to accomplish this. Code would be able to determine when a new row is inserted and do the right thing.
Good luck.