This thread has several reasons why it's beneficial to change. It all boils down to something really simple though: "we do X at Y ST", where X is raid, dungeon, roulettes, FC event, whatever. The point is if you say we do it at, let's say 17:00 ST then everyone can check their clocks and check the game ST and go "OK, that's 6pm for me" or "7pm for me" etc. Right now you simply can't do that, ST is not a constant and therefore is unreliable.
On the topic of server load and issues with queries. Someone mentioned an easy solution to this which I can clarify: append to unix timestamp of the server time to packets from the server. It doesn't have to be every packet and it doesn't really need to be the unix timestamp either. If it were a timestamp it'd be 4 bytes, but we don't really need that for this (it's easier and 100% reliable but this is informative so let's go with another option). Ideally we just need a day of the year and the hour of that day, day of year is 0-365 (1 to 366) and hour is 0-23. That's 14 bits, you'd probably have to round it up to 16 bits and use 2 bytes.
In that situation the client does not ask the server anything, the server merely (ap/pre)pends the servers timestamp (or day + hour) to the packet thus increasing the size by 2 or 4 bytes. Even if this was done at login only it would help, but it could be done once per minute or once per hour or once every x packets...the point is, even for SE and their server infrastructure this is not a big change. If you use the 2 byte approach you get a packet and if it has 2 bytes at the end and the first 2 bits are 10, 01, 11...any really, you know the remaining 14 bits are a day and hour from the servers time (UTC based). Chances are their packets are flagged with a type though so they could just bitshift to say "this is an X packet but it has a timestamp at the end"...so many options with very little overhead.