How do I determine if a column is defined as a serial data type instead of an integer based off the catalog?
Let me add to efesar's answer that the documentation states the following:


  The data types smallserial, serial and bigserial are not true types,
  but merely a notational convenience for creating unique identifier
  columns (similar to the AUTO_INCREMENT property supported by some
  other databases). In the current implementation, specifying:

CREATE TABLE tablename (
    colname SERIAL
);

  
  is equivalent to specifying:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename (
    colname integer NOT NULL DEFAULT nextval('tablename_colname_seq')
);
ALTER SEQUENCE tablename_colname_seq OWNED BY tablename.colname;



Which means that if


a column's data type is integer (bigint) and
it is NOT NULL and
its default value comes from a sequence owned by the column in question


then it is a serial column.  So checking these factors in the catalogs, as you proposed (with the addition of NOT NULL), are sufficient to identify a serial column.

For an actual query to find the (big)serials, see the excellent answer of Erwin Brandstetter.