Do I need to recalibrate z-probe offset every time I switch to a different layer height?
All modern slicers adjust the nozzle position for the first layer in accordance with your chosen layer height. You can see this in your gcode if you slice files with different layer heights. Before you add special slicer settings and offsets, if you print 0.1mm layers, the nozzle will start at Z=0.1mm, and if you print 0.3mm layers, the nozzle will start at Z=0.3mm.

There are two reasons this is more complex and less reliable than it seems:

Different slicers assume different initial tramming gaps. And your actual tramming gap may not match that assumption. If the slicer thinks your nozzle is leveled at Z=0 with a real physical gap of 0.1mm to start with, that means gcode Z=0.1mm is actually a 0.2mm gap that must be filled with plastic. So the slicer must compensate by starting lower than the nominal layer height. 

So what works perfectly for one slicer won't necessarily work correctly for another slicer. And if you tram with a thinner object than the slicer expects (say a post-it note instead of business card) then your first layer will be off.  This is why I personally prefer physical build plate leveling mid-print using screws while watching the strands go down. It bypasses all the assumptions about tramming gaps and just gives you the correct result. (Or you can do the same thing with babystepping in firmware that supports that.)

The other issue is that people use lots of weird, ad hoc slicer tricks to get their first layer to stick. Things like printing the first layer much hotter, or at half speed, or squashed way down and over-extruded, or at 60% layer height, or at 200% extrusion width, will all affect the extrusion volume calibration and the space-filling behavior of the molten plastic flowing onto the bed. The slicer doesn't really have the ability to understand "your" first-layer adhesion recipe. 

The combination of incorrect/unknown tramming gap and person-specific first-layer settings is why the slicer can't always get the first layer height and extrusion volume correct across all layer heights. Within some fairly reasonable assumptions, the slicer is smart enough to always correctly relate extruder flow and nozzle position so it fills the space between the nozzle and whatever surface you're printing onto. But if you break those assumptions, it may perform differently for different settings.