Nun, es gibt viele Fälle, in denen .NET an beiden Enden verwendet wird (und ich würde vermuten, dito für Java). Aber ich vermute, dass die Motivation hinter Java-Server/.NET-Client-Architekturen darin besteht, dass die Anwendung auf Unix als Server-Betriebssystem abzielt, entweder aus Kosten- oder Zuverlässigkeitsgründen oder weil sie in eine bestehende Unix-Server-Umgebung passen muss (z.B. um eng mit bestehenden Unix-Anwendungen zusammenzuarbeiten), aber auf Windows als Client-Plattform abzielt. (Ich denke, dass Java wahrscheinlich viel seltener eingesetzt wird, wenn Windows auch als Serverplattform verwendet wird; ich habe allerdings keine Zahlen, um dies zu belegen).
Wenn man von einem Unix-Server-Betriebssystem ausgeht, dann ist Java eine sehr produktive Wahl, gut unterstützt mit vielen Bibliotheken, aber mit einer größeren Entwicklerbasis (zumindest in "unternehmerischen" Umgebungen) und mehr "Management"-Anerkennung als Alternativen wie Perl, Ruby oder Python.
Umgekehrt ist .NET besser für den Windows-Client geeignet, da es eine viel bessere Unterstützung für die Erstellung von Windows-GUIs bietet. Es ist nicht nur das Tooling: Die Java-GUI-APIs selbst (z. B. Swing) neigen dazu, plattformübergreifende Ähnlichkeit einem nativen Look-and-Feel vorzuziehen, und führen daher eher zu Anwendungen, die nicht wie Windows-Anwendungen aussehen oder sich so verhalten. (Ich verallgemeinere hier ein wenig - sorry!)