Hi James,
There could be a number of reasons for this execution time difference between SELECT and UPDATE.
First, UPDATE statements are sometimes not equally well optimized as SELECT statements. It happens that MySQL is able to make a great execution plan for SELECTs but not for similar UPDATEs. This may be the case here.
Second, SELECT statements don't have to lock rows in InnoDB while UPDATE statements do. Do you have any other UPDATE or DELETE statements running concurrently? If you do, there may be locking conflicts (although the transaction should time out long before 5 minutes).
I assume you don't run MySQL 5.6? If you do (or if you have a chance to install that server version and try your query), you can run EXPLAIN for the UPDATE and provide the details so we can help you more easily. Otherwise it may help to show us the output of EXPLAIN for the SELECT.
Hope this helps,
Jørgen Løland
Software Engineer, MySQL, Oracle
jorgenloland.blogspot.com