Converting UTC time to timestamptz always adds the +01 offset in Postgres
A simple cast from timestamp to timestamptz assumes your current time zone. If you want the cast to assume UTC (or any other time zone) you have to use the AT TIME ZONE construct again:

SELECT (timestamptz '2016-02-20 15:15:54.000495+01' AT TIME ZONE 'UTC') AT TIME ZONE 'UTC';


You may be missing that the AT TIME ZONE has two different use cases. It can transpose timestamptz to timestamp and vice versa.
Related answer with detailed explanation:


Confused about TIMESTAMPTZ internal conversion


Be aware that your statement does not make sense:


  I would expect to get 2016-02-20 14:15:54.000495 as timestamptz.


The text representation of timestamptz is always displayed as local time according to your current time zone setting, extended with an offset to UTC. The literal you display has no offset, so it is a timestamp literal, not timestamptz. Basics here:


Ignoring timezones altogether in Rails and PostgreSQL