Issue 1:
DataFrame.drop_duplicates() does not properly handle array objects returned by DataFrame.columns (whether or not you use DataFrame.columns.values to get a NumPy array). If you compute

list(DataFrame.columns.values)

then it works, but this is needless overkill, especially when dealing with a large number of columns. Below is an example from IPython.

In [71]: dfrm = pandas.DataFrame({"A":[1,2,1,2,1,2], "B":[3,4,3,4,3,4], "C":[1,2,1,2,1,3]})

In [72]: dfrm
Out[72]:
A B C
0 1 3 1
1 2 4 2
2 1 3 1
3 2 4 2
4 1 3 1
5 2 4 3

In [73]: dfrm.drop_duplicates(dfrm.columns)
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (882, 0))
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (6442, 0))
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
/home/espears/<ipython-input-73-bee9ee352073> in <module>()
----> 1 dfrm.drop_duplicates(dfrm.columns)

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/frame.pyc in drop_duplicates(self, cols, take_last)
2254 deduplicated : DataFrame
2255 """
-> 2256 duplicated = self.duplicated(cols, take_last=take_last)
2257 return self[-duplicated]
2258

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/frame.pyc in duplicated(self, cols, take_last)
2283
2284 duplicated = lib.duplicated(keys, take_last=take_last)
-> 2285 return Series(duplicated, index=self.index)
2286
2287 #----------------------------------------------------------------------

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/series.pyc in __new__(cls, data, index, dtype, name, copy)
286 else:
287 subarr = subarr.view(Series)
--> 288 subarr.index = index
289 subarr.name = name
290

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/_tseries.so in pandas._tseries.SeriesIndex.__set__ (pandas/src/tseries.c:73097)()

AssertionError: Index length did not match values

In [74]: dfrm.drop_duplicates(dfrm.columns.values)
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (882, 0))
ERROR: An unexpected error occurred while tokenizing input
The following traceback may be corrupted or invalid
The error message is: ('EOF in multi-line statement', (6442, 0))
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
/home/espears/<ipython-input-74-cb96df701a9b> in <module>()
----> 1 dfrm.drop_duplicates(dfrm.columns.values)

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/frame.pyc in drop_duplicates(self, cols, take_last)
2254 deduplicated : DataFrame
2255 """
-> 2256 duplicated = self.duplicated(cols, take_last=take_last)
2257 return self[-duplicated]
2258

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/frame.pyc in duplicated(self, cols, take_last)
2283
2284 duplicated = lib.duplicated(keys, take_last=take_last)
-> 2285 return Series(duplicated, index=self.index)
2286
2287 #----------------------------------------------------------------------

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/core/series.pyc in __new__(cls, data, index, dtype, name, copy)
286 else:
287 subarr = subarr.view(Series)
--> 288 subarr.index = index
289 subarr.name = name
290

/opt/epd/7.2-1/lib/python2.7/site-packages/pandas/_tseries.so in pandas._tseries.SeriesIndex.__set__ (pandas/src/tseries.c:73097)()

AssertionError: Index length did not match values

In [75]: dfrm.columns.values
Out[75]: array([A, B, C], dtype=object)

In [76]: list(dfrm.columns.values)
Out[76]: ['A', 'B', 'C']

In [77]: dfrm.drop_duplicates(list(dfrm.columns.values))
Out[77]:
A B C
0 1 3 1
1 2 4 2
5 2 4 3

FWIW:

In [91]: pandas.__version__
Out[91]: '0.7.3'

Issue 2:
This was suggested by @MaximilianR here, but @jorisvandenbossche (rightly) proposed to discuss separately.

This is related to the discussion on .rename and .rename_axis's signatures (see above), but touches a different issue. Currently, these two functions are confusing not just because they do the same thing, but also because they (each) do two different things (renaming axis/object name, and relabeling), and because they do not do the most obvious thing (relabeling by passing a list-like - since a list-like is assumed to refer to multiple names for a MultiIndex' levels).

My proposal is the following:

add a new method .relabel, which changes the content of the axis, as in

df.relabel(['l1', 'l2', 'l3']) # changes df.index labels - assuming df.index is flat
df.relabel([['l1a', 'l1b', 'l1c'], [...], [...]]) # changes df.index labels - assuming df.index has 3 levels
df.relabel(a_dict) # again, changes the index labels, analogously to what df.rename(a_dict) currently does

deprecate the use of .rename and .rename_index for doing the same operation, that is when the index or mapper argument (respectively) is a callable or dict-like; keep them (or, even better, keep one and deprecate the other) for changing only index names

Whether the signature of .relabel should follow the axis= or index=, column= standard will depend from the outcome of the discussion about rename and rename_index (#12392).