I think I finally found a nice balance. I'm using Direwolf20 5.1.1 & Dynmap 1.5 (the dev build). Here are some of the settings I changed that I remember. We usually have 10-15 people on at a time and the lag is only noticeable when multiple people are exploring, but it's not unbearable. I also run full renders at night when less people are on.
# How often a tile gets rendered (in seconds).
renderinterval: 3
# How many tiles on update queue before accelerate render interval
renderacceleratethreshold: 60
# How often to render tiles when backlog is above renderacceleratethreshold
renderaccelerateinterval: 0.2
# How many update tiles to work on at once (if not defined, default is 1/2 the number of cores)
tiles-rendered-at-once: 1
# Progress report interval for fullrender/radiusrender, in tiles. Must be 100 or greater
progressloginterval: 100
# Maximum chunk loads per server tick (1/20th of a second) - reducing this below 90 will impact render performance, but also will reduce server thread load
maxchunkspertick: 100