No, there is not a way to do this in the current product "out of the box." From what I can tell on these forums, its one of the more requested features so hopefully they will add it soon.
That said, duplication can be accomplish through the API. Recently one of our guys wrote a "case duplicator" that we use with some success. It requires the FogBugz C# wrapper: http://www.fogcreek.com/FogBugz/blog/post/C-wrapper-for-the-FogBugz-API.aspx
The following code takes in a Case number and duplicates that case and (optionally) all sub-cases then returns the Case number of the duplicate case:
int CopyCase(int caseNumber, int? parentCaseNumber, bool copySubCases)
{
XmlNode caseToCopy = this._FogBugz.XSearch(
caseNumber.ToString(),
"sTitle,sProject,sArea,sCategory,sPriority,hrsOrigEst,ixBugChildren,tags").Item(0);
Dictionary<string, string> newCaseArgs = new Dictionary<string, string>(8);
if (parentCaseNumber.HasValue)
newCaseArgs.Add("ixBugParent", parentCaseNumber.Value.ToString());
//TODO: tags (http://www.fogcreek.com/FogBugz/docs/70/topics/advanced/API.html)
newCaseArgs.Add("sTitle", caseToCopy["sTitle"].InnerText);
newCaseArgs.Add("sProject", caseToCopy["sProject"].InnerText);
newCaseArgs.Add("sArea", caseToCopy["sArea"].InnerText);
newCaseArgs.Add("sCategory", caseToCopy["sCategory"].InnerText);
newCaseArgs.Add("sPriority", caseToCopy["sPriority"].InnerText);
newCaseArgs.Add("hrsCurrEst", caseToCopy["hrsOrigEst"].InnerText);
XmlDocument resultXml = this._FogBugz.XCmd("new", newCaseArgs);
int result = int.Parse(resultXml["response"]["case"].Attributes["ixBug"].Value);
if (copySubCases)
{
XmlNode subCaseNumbersNode = caseToCopy["ixBugChildren"];
if (subCaseNumbersNode != null)
{
string[] subCaseNumbers = subCaseNumbersNode.InnerText.Split(",".ToCharArray());
foreach (string subCaseNumber in subCaseNumbers)
{
if (!string.IsNullOrEmpty(subCaseNumber))
this.CopyCase(int.Parse(subCaseNumber), result, copySubCases);
}
}
}
return result;
}