Essentially, the "IF EXISTS" portion was being ignored, and an error
thrown anyway if the opfamily did not exist.
I broke this in commit 
fd1843ff8979c0461fb3f1a9eab61140c977e32d; so
backpatch to 9.1.X.
Report and diagnosis by KaiGai Kohei.
    tuple = OpFamilyCacheLookup(amID, stmt->opfamilyname, stmt->missing_ok);
    if (!HeapTupleIsValid(tuple))
    {
-       ereport(ERROR,
-               (errcode(ERRCODE_UNDEFINED_OBJECT),
-                errmsg("operator family \"%s\" does not exist for access method \"%s\"",
-                       NameListToString(stmt->opfamilyname), stmt->amname)));
+       ereport(NOTICE,
+               (errmsg("operator family \"%s\" does not exist for access method \"%s\", skipping",
+                  NameListToString(stmt->opfamilyname), stmt->amname)));
        return;
    }
 
 
 DROP OPERATOR FAMILY test_operator_family USING btree;
 ERROR:  operator family "test_operator_family" does not exist for access method "btree"
 DROP OPERATOR FAMILY IF EXISTS test_operator_family USING btree;
-ERROR:  operator family "test_operator_family" does not exist for access method "btree"
+NOTICE:  operator family "test_operator_family" does not exist for access method "btree", skipping
 DROP OPERATOR FAMILY test_operator_family USING no_such_am;
 ERROR:  access method "no_such_am" does not exist
 DROP OPERATOR FAMILY IF EXISTS test_operator_family USING no_such_am;