Once again,
When you use a non-named vector in the scale_*_manual() you are in danger to assign the wrong label to your variables, because ggplot doesn't know how to match old labels with a new one and do it in "the order of appearance" (perhaps somewhere in the documentation you can find the exact way ggplot makes this order). Here is an example, to show what I mean (read comments in the code)
suppressMessages(library(tidyverse))
# Simple data frame with two observations and
# the grouping variable
(df <- tribble(
~Num1, ~Num2, ~gr,
1, 1, "one",
10, 10, "ten"
))
#> # A tibble: 2 x 3
#> Num1 Num2 gr
#> <dbl> <dbl> <chr>
#> 1 1 1 one
#> 2 10 10 ten
# If we use scale_color_manual() just to change colors
# we will get everything right
ggplot(df, aes(x = Num1, y = Num2, color = gr))+
geom_point()+
scale_color_manual(values = c("red", "blue"))

# Now let's try to change the labels so they are showed as numbers
ggplot(df, aes(x = Num1, y = Num2, color = gr))+
geom_point()+
scale_color_manual(values = c("red", "blue"),
labels = c("1", "10"))

# But if we put our labels in the wrong order we will get a non-sense result!
# Now our (1,1) point has label "10", while (10, 10) point has label "1"
ggplot(df, aes(x = Num1, y = Num2, color = gr))+
geom_point()+
scale_color_manual(values = c("red", "blue"),
labels = c("10", "1"))

# If you want to change labels with scale_*_manual()
# use named vector like in this example, then you will be safe,
# because order doesn't matter anymore
ggplot(df, aes(x = Num1, y = Num2, color = gr))+
geom_point()+
scale_color_manual(values = c("red", "blue"),
labels = c("ten" = "10", "one" = "1"))

This is exactly what happened in your original example and it is also repeated in your new version when you leave scale_color_manual(labels = c(...)).
Here are your plots. You may see that the same groups of points have different labels. Obviously, if you mismatch labels in the plot further analysis of the results will lead you to a wrong conclusion.
Hence, in your specific example, I would use scale_color_manual() leaving only argument values = c(...) (because some of the default colors are difficult to distinguish). Also, note changes in the theme().
df_S_Cold %>%
ggplot(aes(x = dN, y = dS, color = interaction(Label_ID1, Label_ID2, sep = "vs"))) +
geom_point() +
scale_y_continuous(trans='log10') +
scale_x_continuous(trans='log10') +
labs(title = "S Protein",
subtitle = "Cold variants",
x = "dN rate",
y = "dS rate",
color = "Comparison") +
scale_color_manual(values=c(
"#dd6d5d", # Red
"#ddad5d", # Yellow
"#ad5ddd", # Purple
"#5ddd6d", # Green
"#dd8d5d", # Orange
"#5d6ddd", # Blue
"#5dddcd", # Light blue
"#703818", # Brown
"#ffd38b", # Light Yellow and Pink
"#ffa5c7")) +
theme_gray() + # Perhaps you don't need this, because theme_gray() is default
theme(axis.title = element_text(),
legend.position = "bottom")
Please, let me know if you have any further questions.