Is there something I can do to make this UPDATE run faster?
In addition to being slow, the statement's results will not be what you expect them to (which causes it to be slow): 

From the PostgreSQL documentation:


  from_list A list of table expressions, allowing columns from other tables to appear in the WHERE condition and the update expressions. This is similar to the list of tables that can be specified in the FROM Clause of a SELECT statement. Note that the target table must not appear in the from_list, unless you intend a self-join (in which case it must appear with an alias in the from_list).


AFAICT you are updating each row of enumeratedsensorreading with values obtained by performing an unqualified join (no WHERE-clause) of enumeratedsensorreading against (a qualified join of enumeratedsensorreading against sitequantitysensor (FROM-clause)). This will result in at least 600k updates per row (depending on whethe the relevant values in sitequantitysensor are distinct).

Simply removing the second join should do the trick:

WITH sensor_ids AS 
  (SELECT DISTINCT sensorid, siteid, quantityid FROM sitequantitysensor) 
UPDATE enumeratedsensorreading e 
  SET sensorid = s.sensorid 
  FROM sitequantitysensor s 
  WHERE s.siteid = e.siteid AND s.quantityid = e.quantityid;


The join you intended is already defined by FROM- and WHERE-clause