When is a char array not a char array....?

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");