using string concatenation to reference a table
You can't use variables for columns. So you would need to do something like this:

CREATE RULE update_main_table AS ON INSERT TO entity_history
DO
UPDATE entity 
   SET eValue1 = case 
                    when new.type = 'Value1' then NEW.val
                    else eValue1
                 end,
       eValue2 = case 
                    when new.type = 'Value2' then NEW.val
                    else eValue2
                 end;




Now I guess you didn't show us the whole picture and you have more than just two columns in the entity table (which will make the above update statement very inefficient and cumbersome). 

The whole thing looks like a variation of the (anti) pattern named "entity-attribute-value". As you are using Postgres, I would highly recommend using the hstore data type to store key value pairs.

At least in the entity table you could do that:

CREATE TABLE entity (
    eID     SERIAL PRIMARY KEY,
    eName   VARCHAR(255) NOT NULL,
    value   hstore
);


Then you could just do:

CREATE RULE update_main_table AS ON INSERT TO entity_history
DO
UPDATE entity 
   SET value = value || hstore(NEW.type, NEW.val::text)
WHERE eid = new.eID_FK;


Additionally this will automatically adjust to new "value types" without the need to rewrite the statement.

Maybe you can even restructure the entity_history table to also use a hstore column.