Currently, in our test environemnt, I have not observed "system.boottime" showing a small value or "system.uptime" showing a big value, but I have observed that "system.boottime" and "system.uptime" show the same numbers in the non-global zone as they do in the global zone.
Here is a bit of a research regarding the possible ways to fix the problem. In the present implementation we use "boot_time" kstat counter:
$ kstat -p -s '*boot*'
If that counter is obtained in the non-global zone, it still returns the value for the global zone.
One idea that appeared in the process was to look at system calls that system utilities perform. For instance, here is the output of "psrinfo":
0 on-line since 12/05/2014 13:03:02
Doing its "truss" says that it looks at "cpu_info0" kstat counter:
time() = 1418141200
ioctl(3, KSTAT_IOC_READ, "cpu_info0") = 8068
Its value is:
$ kstat -p -n cpu_info0 | grep 141
That would probably be another way to get system boot time, but that still returns the same boot time as the global zone.
Code in http://fossies.org/linux/monit/src/process/sysdep_SOLARIS.c also gave a hint that kstat might not be the way to go for non-global zones.
A more likely candidate for deeper inspection is "uptime" utility:
6:21pm up 36 min(s), 1 user, load average: 0,00, 0,00, 0,02
Doing its "truss" says that it looks in "/var/adm/utmpx" using getutxent() and similar system calls, see http://docs.oracle.com/cd/E19109-01/tsolaris8/817-0882/6mglcr99g/index.html for their documentation. This idea is further confirmed in http://compgroups.net/comp.unix.solaris/source-of-boottime-for-uptime-other-than-ut/41559 . (That discussion also suggests to stat() /proc/0 and look at its atime/mtime/ctime to get system boot time.)
An implementation based on "/var/adm/utmpx" is currently available in development branch svn://svn.zabbix.com/branches/dev/ZBX-6047 . The patch that implements the change is attached as "var-adm-utmpx.patch". It would be nice if you could test whether that patch also solves the reported problem.
On our test system with the "/var/adm/utmpx" approach the agent reports good values:
$ ./zabbix_agentd -t system.boottime
$ ./zabbix_agentd -t system.uptime