BUG: a categorical series from `pd.cut()` is not equal to `pd.Series(..., dtype='category')`
### 

- [X] I have checked that this issue has not already been reported.

- [X] I have confirmed this bug exists on the [latest version](https://pandas.pydata.org/docs/whatsnew/index.html) of pandas.

- [ ] I have confirmed this bug exists on the master branch of pandas.


### Reproducible Example

```python
In [1]: import pandas as pd

In [2]: res = pd.cut(pd.Series([10, 20]), [10, 20], labels=['a'])

In [3]: res
Out[3]:
0    NaN
1      a
dtype: category
Categories (1, object): ['a']

In [4]: excepted = pd.Series([float('nan'), 'a'], dtype='category')

In [5]: excepted
Out[5]:
0    NaN
1      a
dtype: category
Categories (1, object): ['a']

In [6]: res.equals(excepted)
Out[6]: False

In [7]: res == excepted
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-7-3cea8b164d71> in <module>
----> 1 res == excepted

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
     67         other = item_from_zerodim(other)
     68
---> 69         return method(self, other)
     70
     71     return new_method

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\arraylike.py in __eq__(self, other)
     30     @unpack_zerodim_and_defer("__eq__")
     31     def __eq__(self, other):
---> 32         return self._cmp_method(other, operator.eq)
     33
     34     @unpack_zerodim_and_defer("__ne__")

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\series.py in _cmp_method(self, other, op)
   5500
   5501         with np.errstate(all="ignore"):
-> 5502             res_values = ops.comparison_op(lvalues, rvalues, op)
   5503
   5504         return self._construct_result(res_values, name=res_name)

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op)
    268     ):
    269         # Call the method on lvalues
--> 270         res_values = op(lvalues, rvalues)
    271
    272     elif is_scalar(rvalues) and isna(rvalues):

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
     67         other = item_from_zerodim(other)
     68
---> 69         return method(self, other)
     70
     71     return new_method

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\arrays\categorical.py in func(self, other)
    143             msg = "Categoricals can only be compared if 'categories' are the same."
    144             if not self._categories_match_up_to_permutation(other):
--> 145                 raise TypeError(msg)
    146
    147             if not self.ordered and not self.categories.equals(other.categories):

TypeError: Categoricals can only be compared if 'categories' are the same.

In [8]: res.cat.categories == excepted.cat.categories
Out[8]: array([ True])
```


### Issue Description

The categorical data comparison behavior is weird.
I want to check the result of `pd.cut` method is right or not, so I create a new one from `pd.Series` with `dtype='category'`.
They are looked the same, base on **In [3]** and **In [5]**.

TypeError message shows their categories are not the same. But **In [8]** means their categories are equal.

I also consider the `NaN` could cause that, but the same problem happens.

```python
In [9]: res.dropna() == excepted.dropna()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-08dae9fc1d53> in <module>
----> 1 res.dropna() == excepted.dropna()

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
     67         other = item_from_zerodim(other)
     68
---> 69         return method(self, other)
     70
     71     return new_method

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\arraylike.py in __eq__(self, other)
     30     @unpack_zerodim_and_defer("__eq__")
     31     def __eq__(self, other):
---> 32         return self._cmp_method(other, operator.eq)
     33
     34     @unpack_zerodim_and_defer("__ne__")

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\series.py in _cmp_method(self, other, op)
   5500
   5501         with np.errstate(all="ignore"):
-> 5502             res_values = ops.comparison_op(lvalues, rvalues, op)
   5503
   5504         return self._construct_result(res_values, name=res_name)

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\array_ops.py in comparison_op(left, right, op)
    268     ):
    269         # Call the method on lvalues
--> 270         res_values = op(lvalues, rvalues)
    271
    272     elif is_scalar(rvalues) and isna(rvalues):

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\ops\common.py in new_method(self, other)
     67         other = item_from_zerodim(other)
     68
---> 69         return method(self, other)
     70
     71     return new_method

C:\Software\miniconda3\envs\work\lib\site-packages\pandas\core\arrays\categorical.py in func(self, other)
    143             msg = "Categoricals can only be compared if 'categories' are the same."
    144             if not self._categories_match_up_to_permutation(other):
--> 145                 raise TypeError(msg)
    146
    147             if not self.ordered and not self.categories.equals(other.categories):

TypeError: Categoricals can only be compared if 'categories' are the same.

In [10]: res.dropna().equals(excepted.dropna())
Out[10]: False
```

### Expected Behavior

I think `res.equals(excepted)` should return `True` and `res == excepted` should return `pd.Series([False, True])`.

### Installed Versions

<details>

INSTALLED VERSIONS
------------------
commit           : 73c68257545b5f8530b7044f56647bd2db92e2ba
python           : 3.8.10.final.0
python-bits      : 64
OS               : Windows
OS-release       : 10
Version          : 10.0.19043
machine          : AMD64
processor        : Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder        : little
LC_ALL           : None
LANG             : zh_CN.UTF-8
LOCALE           : Chinese (Simplified)_China.936

pandas           : 1.3.3
numpy            : 1.21.2
pytz             : 2021.1
dateutil         : 2.8.1
pip              : 21.2.4
setuptools       : 58.0.4
Cython           : 0.29.24
pytest           : 6.2.5
hypothesis       : None
sphinx           : None
blosc            : None
feather          : None
xlsxwriter       : None
lxml.etree       : None
html5lib         : None
pymysql          : None
psycopg2         : 2.9.1 (dt dec pq3 ext lo64)
jinja2           : 3.0.1
IPython          : 7.27.0
pandas_datareader: None
bs4              : None
bottleneck       : None
fsspec           : None
fastparquet      : None
gcsfs            : None
matplotlib       : 3.4.3
numexpr          : None
odfpy            : None
openpyxl         : 3.0.8
pandas_gbq       : None
pyarrow          : None
pyxlsb           : None
s3fs             : None
scipy            : 1.7.1
sqlalchemy       : 1.4.23
tables           : None
tabulate         : None
xarray           : 0.19.0
xlrd             : 2.0.1
xlwt             : None
numba            : None

</details>
