Before I reply I should point out that I really hate Scrum's estimation and velocity as it's traditionally done, so while this might give you some ideas, feel free to adapt your existing process accordingly.
The reason you're having to split "epics" into smaller stories and features is because they won't fit into the timebox of a sprint. There are only a few reasons to estimate and use timeboxes:
To engage stakeholders at regular intervals and get their feedback (those might be live users if you're actually releasing)
To get the trust of stakeholders, when they see that you can deliver what you said you would
To let people adjust scope based on history
To work out whether there are any elements of the problem you're solving that you might have misunderstandings about; different estimates can show this up.
Getting stakeholder feedback
You don't need to break things down to get feedback, if you're just focusing on doing something that will get stakeholders' feedback. Pick whichever thing you think you might need feedback on, then get something working and make it increasingly realistic within the timebox (and if you can get feedback early so much the better!) For instance, I hard-code a UI and show it to someone, then I get it working with a hash-map in memory, then I couple it to the persistence layers and thence the database (when the users are the stakeholder who is most able to give me feedback, anyway).
Getting stakeholder trust
If your stakeholders don't trust you, focus on delivering something valuable. You might need to split up your "epics" to do that, but this should be your focus, rather than "get something done within the sprint". If this is the case, pick small, safe things that you can do easily and quickly, because your relationship with the stakeholder is probably the biggest risk. After you've got their trust you can start trying the tricky stuff and getting their feedback.
Release planning and scope adjustment
If you want to adjust scope based on history, you can always do it with the original "epic" estimates. These are estimates, so they're likely to be wrong; you can't use a small sample of them to predict the future, so the scope adjustment is likely to be continuous and getting smaller as you approach release. (Ideally you're creating a Minimum Viable Product and releasing anyway so this point is moot).
Discovering uncertainty and misunderstanding
If you're using estimates to discover misunderstanding, you may still miss some. I suggest talking through examples of how the application might work instead, a la BDD.
Split them up as and when
Rather than focusing on having small enough stories for a sprint, you may find it more useful to focus on the reasons for having the sprint in the first place. Whatever you find yourself working on as a result, put it on the board, and life will be much easier, with shorter planning meetings.
It may help if you work out whether your "epics" are capabilities (provides the capability to trade copper, for instance) or features (one of potentially many concrete user interfaces that provide the capability). Splitting capabilities into features and having some wireframes sketched out before the sprint is IMO fine. After that, leave the dev team free to split up the stories as they see fit, based on the principles above. This will also help you get a self-organising team, and gives the team a clear focus for each timebox.
Craig Larman told me that the original reason for month-long sprints was because you could actually focus on small releases, with only the different MVPs being prioritised by the business. Feedback was available all the time, and how much could be achieved, and released, within that month was completely down to the dev team. I think this original vision of Scrum has been corrupted and is much missed.
If you're thinking of splitting your stories into tasks, please read this too.