update times seem to be very slow based on what is being updated
Only a single row gets selected. For a single row, the plan looks as good as it can be. However, because you posted an anonymized plan, we can not see how complex and possible time-consuming the computations in the various Compute Scalar operators are (the formula used for the computation is removed as part of the anonymization). If these invoke a scalar user-defined function that needs to do a lot of work, then that UDF is where you need to focus your tuning efforts.
Although frankly, I would in most cases be happy with a 3ms execution time and not bother optimizeing it further. 🙂