byte_1 is already a byte string. byte_2 and byte_3 are Unicode strings being encoded to byte strings.
'\xc0' is an escape code representing a Unicode code point, U+00C0.
b'\xc0' is an escape code representing a byte value of 0xC0.
In UTF-8, Unicode code points above U+007F are encoded in two or more bytes, so '\xc0'.encode() returns the two bytes b'\xc3\x80'.
If you want to get equivalent strings, use the latin1 codec. The Latin-1 (a.k.a ISO-8859-1) character set occupies the first 256 code points of the Unicode standard, and therefore maps 1:1 from code points < U+0100 to bytes. Example:
byte_1 = b'\xc0*\xael<\x9e\xcf\x81\xa2\xd8\xb5\xe3\x1d\xe1\xaa8'
byte_2 = bytes('\xc0*\xael<\x9e\xcf\x81\xa2\xd8\xb5\xe3\x1d\xe1\xaa8', 'latin1')
byte_3 = ('\xc0*\xael<\x9e\xcf\x81\xa2\xd8\xb5\xe3\x1d\xe1\xaa8').encode('latin1')
print(byte_1 == byte_2)
print(byte_1 == byte_3)
print(byte_2 == byte_3)
True
True
True
Recommended reading: