Are you saying that this prints "PWM Topic":
if (!strcmp(topic, "occ/shed/po"))
Serial.println("PWM Topic");
But this doesn't:
strcpy(PWMTopic, "occ/shed/po");
if (!strcmp(topic, PWMTopic))
Serial.println("PWM Topic");
It sounds like the contents of your buffer is not exactly what you think. I would display the characters in HEX before the comparison, just to be sure there are no invisible characters.
for (int i = 0; i < strlen(PWMTopic); i++)
{
Serial.print((byte)PWMTopic[i], HEX);
Serial.print(' ');
}
Serial.println();
if (!strcmp(topic, PWMTopic))
Serial.println("PWM Topic");