I realize I already put down my vote, but I'd like to promote my case after some thought. I guess what we're trying to find out is what's more troublesome and/or surprising:
1. having to set the port explicitly (to #f?) when you want to change the scheme and its port
2. having to set the port explicitly back to its original value if you want to change scheme but not its port
I don't think it's unreasonable to expect the user to realize he/she has to change the port if he/she changes the port (as in 1.). That requires an understanding of the relationship between scheme and port by the user.
I do, however, think it's more unreasonable to expect the user to realize he/she has to "change" the port back to its original value if he wants to change the scheme but not the port. In this case, you need to understand the internals of uri-common. (You need to understand the scheme-port relationship as well to make sense of the API). I also think it's unfortunate that you cannot simply look at the keywords in update-uri and know exactly which fields are modified by quick glance.
Thanks for considering the change :) my vote's on 1.
K.