We're currently in process on a monthly update for our flagship product and a Beta release for our new Electronic Medical Records product(see the 6N Systems site if you're interested in learning more). As an ASP, we make data updates to centralised (yet separate) db servers, then push webservice changes, then finally update a file patching application that will load the any changed client functionality on the next user login.
This model has been in place for quite a while, and it's been somewhat successful over the years. I say "somewhat" because as we've grown, we have more clients, more patch requests, and at least one problem to be solved each time we do a push.
As I see it, the problems that we have can include: