By default I believe that homing the printer will remove the levelling data, and you have to run commands to get it to load the saved mesh. Unless you set the option to restore levelling after G28.
Now this is not necessarily something that OctoPrint has caused, but maybe the firmware responds differently to levelling over SD card vs. serial. Or, there is something in gcode scripts, plugins, or buttons pressed in the webUI that made something different from serial, we could find out what this was with a serial.log - though you have to enable it first.
You haven't said what firmware or printer you are using - please do so. Is the BLTouch used to home the Z axis, or do you have a separate limit switch for homing? In addition, I am slightly confused by this statement:
If you have a BLTouch, then that will do the levelling for you, rather than you having to fine-tune it. It gives me the feeling that something is off with the setup if it takes you a lot of trial and error, once it probes once then the firmware should compensate for the differences.