STL only supports faces (as opposed to solids), so I'd be surprised if converting to BoundaryMeshRegion and triangulating fixed things.
Printout3D does some repair with the option Method -> "PerformModelRepair" (I believe this is the default setting). In your case, your model comes back repaired:
FindMeshDefects[RepairMesh[DiscretizeGraphics[ms]], All, "Cell"]
<|"FlippedFaces" -> {}, "HoleEdges" -> {}, "TinyFaces" -> {}, "SingularVertices" -> {}, "DanglingEdges" -> {}, "SingularEdges" -> {}, "TinyComponents" -> {}, "TJunctionEdges" -> {}, "IsolatedVertices" -> {}, "OverlappingFaces" -> {}|>
As for the external software, it's hard to know what's going wrong, but it sounds like something is preventing it from inferring a solid. Which software are you using?
Perhaps a different technique would give a better result.
The highest fidelity method is probably subtracting away the cylinders and paraboliod from the cuboid. We can do this with mesh based boolean operations in 11.2+:
δ = .5; fill = BoundaryDiscretizeGraphics[Cuboid[{-15, -15, 0}, {15, 15, 8}]]; cyls = Table[With[{cx = c Cos[a], cy = c Sin[a]}, Cylinder[{{cx, cy, -1}, {cx, cy, 9}}, 3]], {a, 0, 5 Pi/3, Pi/3}] dc = RegionUnion @@ (BoundaryDiscretizeRegion[#, MaxCellMeasure -> .1δ] & /@ cyls); parab = ImplicitRegion[z > base + (x^2 + y^2)/(4 f), {{x, -l, l}, {y, -l, l}, {z, 0, 8}}]; db = BoundaryDiscretizeRegion[parab, MaxCellMeasure -> δ]; model = RegionDifference[RegionDifference[fill, dc], db]

Note the weird artifacts in the paraboloid. I think this is just an issue with rendering multi-cell polygons, as Normal[Show[mesh]] renders just fine.
This model is also has no defects:
Values @ FindMeshDefects[RepairMesh[model], All, "Cell"]
{{}, {}, {}, {}, {}, {}, {}, {}, {}, {}}
Give this one a try and see if it works.
msinto aBoundaryMeshand useTriangulateMesh. $\endgroup$