Just found out this morning that if SELinux is in enforcing mode, it may block the timedatectl command to run in RHEL7. Once changing SELinux to permissive, the problem is gone.
Here is the error that I got when executing ‘timedatectl set-timezone Australia/Sydney’ in a bash script: Failed to issue method call: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, the reply timeout expired, or the network connection was broken.