However, I have run into yet another problem (see integrated outflow results) which for some strange reason presents the units as [s m3] but should be just [m3].
Prime is perfectly right - if you integrate a volume (Q.out(length)) over time (dt) you get dimension volume*time.
Why are time [s] units appearing in the result?
because you variable of integration is time.
The dimension of Int(a, db) is dimension_of_a * dimension_of_b. You may look at the integral as the summation of an (infinite) number of very small rectangles. In your case the "height" of those rectangles is measured in liter or m^3 (Q.out) and the (infinitesimal small) width dt in seconds.
You see the same effect in your sheet with the integral of I over time. I has dimension volume/time und so the integral has dimension volume.
Are you really sure about feeding h(t)/s into Q.out in the odesolve block? I just did it to show that using the correct units makes the solve block work but I never thought this would make any sense looking at the physics of the problem.
If it really should make sense (which I doubt) you get you desired units by using depth(t)/seconds when calling Q.out in your integral.
But I would urge you to doublecheck your formulas for consistency.