Yes! It is safe to use memcpy(buffer, my_string, strlen(my_string)); when copy from a char* string literal to a uint8_t[] buffer.
In C99, char and uint8_t are both character types, and do not have padding bits. memcpy works at the byte level and will copy only the meaningful data (i.e., bytes actually used by the string), no hidden or undefined padding will be introduced when copying a string this way.
In addition, from ISO/IEC 9899:201x Programming languages -- C, 6.2.6.1 Representations of types, General, paragraph 3:
Values stored in unsigned bit-fields and objects of type unsigned char shall be represented using a pure binary notation.
The key points: unsigned char is always a pure binary representation - no padding, no trap representations, no weirdness.