To correct some information in previous comments - Windows 8.1 added new APIs to deal with dynamic changes in scaling and it also introduced virtualization of scaling for many cases. Basically, DPI was introduced in 3 stages over time:
- Originally there was no DPI to query and all applications just assumed 96 DPI.
- Then (in XP?) they added a query for DPI, but it only returned a single answer for all screens and it only changed when you logged off and back on. Applications could declare that they would honor the DPI and if they didn't then the system would pixel-stretch their windows for them and lie about various system metrics.
- Finally in Windows 8.1 they introduced some newer procedure calls and events to query DPI independently for different monitors and to dynamically change the DPI as windows move between monitors and/or the user updates their preferences in the control panels. If an application declares that they are going to use those APIs then they will get dynamic notifications and up to date answers and per-monitor answers. But, if applications fall into either of the previous 2 categories then they will only get a single system wide DPI answer for all monitors and it will not change as the control panel settings change. Windows 8.1 will also virtualize such windows (basically use pixel scaling to display them on the screen at the correct new size according to the latest preference settings, but while continuing to tell the application that the old DPI values are in effect).
Windows 8.1 added the APIs that lets applications do the right thing, but there are likely a lot of older applications that experience various forms of virtualization. Also, when you declare that you are using the latest procedure calls to query the DPI values, they leave all of the implementation up to you and so the applications might then make mistakes on their own that have nothing to do with the system. Basically, declaring themselves as aware of per-monitor DPI means that the system gives them accurate information and that is all - any mistakes in sizing are then a mistake in that application. (And, many parts of what we consider the operating system like the desktop and the task bar are essentially applications from the perspective of who is responsible for the work.) Thus, the icon sizing isn't necessarily an indication that something is wrong with the base OS, it could just be that the engineer who is responsible for maintaining the drawing of the task bar has some bugs in the way they field the notifications. Similarly, some of the legacy control panels are simply blessed applications that were written back in the days of "What's DPI?" and so they have always been virtualized (pixel scaled) and will continue to do so until MS rewrites those applications towards newer APIs.