I've found the best approach to doing this is to first bundle the metadata in the org into a Package. Then, you can retrieve only metadata from the package which will exclude all standard Salesforce metadata and metadata from other managed packages.
It's pretty easy to do. In the org where you want to extract metadata, go to Setup -> Create -> Packages. Create an unmanaged package. Then, use the Add Components button to add all the metadata you want to pull into the package. Once you have the metadata bundled, you can use the ant migration tool to fetch the metadata:
<sf:retrieve
username="${sf.username}"
password="${sf.password}"
serverurl="${sf.serverurl}"
retrieveTarget="TARGET_DIR_PATH_HERE"
packageNames="PACKAGE_NAME_HERE"/>
I found this far easier than the previous way I was fetching metadata where I would have to run cleanup scripts to delete metadata I wasn't interested in (standard fields and managed package metadata).
It also allows you to play around with metadata in your org but not "commit" it to the package. For example, you can add a custom field called MyTest and not add it to your package. If you retrieve the package, the field will not be included in the retrieve. If you then add the field to the package via Add Components and then retrieve, you will get the field. It's a far more explicit approach to handling metadata retrieves in my opinion.