Basically that's the question - I wonder if
set_transient() overwrites/updates a transient option with the same key?
Yes, key (prefixed with string identifying it as transient) is used as option name when value is inserted in database.
Maybe, but in my case set_transient() has failed when re-used without delete_transient() first. For some time I thought the problem was that the array I was saving as a transient was too large but that wasn't it. I recommend that you delete the transient first if you're having a problem.