Several months ago I was looking for a similar function, but couldn't find a way to load a file from the SDCard - or even using a content provider. I haven't looked since.
However one method I spotted, which proved useful as I was already communicating with a webserver
getting maps to accept a dynamically generated KML file?
This allowed me to dispatch the KML from my app to the server (communicating was already in place), the server stored the KML, assigned a random string, and returned it to the app, the app then passed a link to the server in the style:
final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://website.com/kml_gen.php?id=1kj312"));
startActivity(myIntent);
The server returned a KML list for the map app to use.
An update after comments below:
final Intent myIntent = new Intent(android.content.Intent.ACTION_VIEW,
Uri.parse("geo:0,0?q=http://code.google.com/apis/kml/documentation/KML_Samples.kml"));
startActivity(myIntent);
Try running the above code - you will see when you run it, the google map app is opened, and it will request the kml file, in this case the samples file from google. This is a map with an overlay, but it is now the google map application and no longer being run inside your application.
For this solution you would need to store your KML file on a web server somewhere - this has a slight problem in that the user needs a data connection (which the map would need anyway - but if the kml file is large and the connection slow there maybe a delay).
You mentioned you had a server producing some dynamic data and also some static stuff. If the static stuff is the same for everyone and every time a server produces some data I would be tempted to have the web serve