Does "alter table … set data type" functionally differ from "alter table … type"?
Keywords in square brackets in the synopsis of SQL commands in the manual are optional. And in this case just noise. Add them or leave them, no functional difference. (The verbose form SET DATA TYPE conforms to standard SQL.)

bigint occupies 8 bytes, integer occupies 4 bytes. A table rewrite is inevitable. The manual:


  As an exception, when changing the type of an existing column, if the
  USING clause does not change the column contents and the old type is
  either binary coercible to the new type or an unconstrained domain
  over the new type, a table rewrite is not needed; but any indexes on
  the affected columns must still be rebuilt.


Bold emphasis mine. Those are the "appropriate cases" that don't trigger a table rewrite since Postgres 9.1.